2011-07-21 8 views

risposta

2

Non so come calcolare FPS (suppongo che debba essere eseguito a livello di sistema e non sia calcolato per visualizzazione), ma è possibile utilizzare Hierarchy Viewer per il profilo delle prestazioni di ogni View. Ti dà il tempo necessario per misurare, calcolare il layout di, e disegnare ogni View in millisecondi, e ti aiuta a trovare oggetti lenti View mostrando cerchi gialli e rossi che indicano cattive prestazioni.

0

Potresti essere interessato a questo ListAdapter, che avvolgerà un altro ListAdapter e stamperà le dichiarazioni del registro sul numero di visualizzazioni visualizzate al secondo.

import android.database.DataSetObserver; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListAdapter; 

public class VpsAdapter implements ListAdapter { 
    protected int vpsViewCount = 0; 
    protected long vpsStartTimeNanos = System.nanoTime(); 
    protected ListAdapter delegate; 

    public VpsAdapter(ListAdapter delegate) { 
     super(); 
     this.delegate = delegate; 
    } 

    public void resetViewsPerSecond() { 
     vpsViewCount = 0; 
     vpsStartTimeNanos = System.nanoTime(); 
    } 

    public double getViewsPerSecond() { 
     final long now = System.nanoTime(); 
     return (vpsViewCount/(double)(now - vpsStartTimeNanos)) * 1e9; 
    } 

    public int getViewsPerSecondViewCount() { 
     return vpsViewCount; 
    } 

    @Override 
    public boolean areAllItemsEnabled() { 
     return delegate.areAllItemsEnabled(); 
    } 

    @Override 
    public int getCount() { 
     return delegate.getCount(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return delegate.getItem(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return delegate.getItemId(i); 
    } 

    @Override 
    public int getItemViewType(int i) { 
     return delegate.getItemViewType(i); 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     ++vpsViewCount; 
     Log.d("VpsAdapter", String.format("VpsAdapter: %.2f views per second (%s views)", getViewsPerSecond(), getViewsPerSecondViewCount())); 
     return delegate.getView(i, view, viewGroup); 
    } 

    @Override 
    public int getViewTypeCount() { 
     return delegate.getViewTypeCount(); 
    } 

    @Override 
    public boolean hasStableIds() { 
     return delegate.hasStableIds(); 
    } 

    @Override 
    public boolean isEmpty() { 
     return delegate.isEmpty(); 
    } 

    @Override 
    public boolean isEnabled(int i) { 
     return delegate.isEnabled(i); 
    } 

    @Override 
    public void registerDataSetObserver(DataSetObserver dataSetObserver) { 
     delegate.registerDataSetObserver(dataSetObserver); 
    } 

    @Override 
    public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { 
     delegate.unregisterDataSetObserver(dataSetObserver); 
    } 
} 

Per utilizzare, semplicemente avvolgere il ListAdapter esistente in un VPSAdapter, ad es.

setListAdapter(new VpsAdapter(myAdapter)); 

Quindi chiamare resetViewsPerSecond() quando si è pronti per iniziare la tempistica e l'getViewsPerSecond() quando si è pronti a recuperare il risultato. L'adattatore registrerà anche sulla console l'attuale vps per ogni chiamata a getView().

Io uso questo adattatore in combinazione con ListView.smoothScrollTo(adapter.getCount()-1) per far scorrere a livello di codice la listview in basso e ottenere i vps medi.

Problemi correlati