2012-04-18 169 views
1

我有一個第三方框架,顯示在SurfaceView上的視頻。我想測量視頻的幀率,以檢查手機是否能夠足夠快地顯示視頻,或者是否需要使用其他解決方案向用戶顯示信息。如何計算SurfaceView刷新的幀率?

我怎麼能衡量一個SurfaceView的更新速度是多少?

+0

這個答案可能幫助.. http://stackoverflow.com/questions/13498184/editing-android-videoview-frames/13667582覆蓋draw方法.. – Ronnie 2012-12-04 15:54:40

回答

11

如果代碼是不明確的只是問。

LinkedList<Long> times = new LinkedList<Long>(){{ 
    add(System.nanoTime()); 
}}; 

@Override 
protected void onDraw(Canvas canvas) { 
    double fps = fps(); 
    // ... 
    super.onDraw(canvas); 
} 

private final int MAX_SIZE = 100; 
private final double NANOS = 1000000000.0; 

/** Calculates and returns frames per second */ 
private double fps() { 
    long lastTime = System.nanoTime(); 
    double difference = (lastTime - times.getFirst())/NANOS; 
    times.addLast(lastTime); 
    int size = times.size(); 
    if (size > MAX_SIZE) { 
     times.removeFirst(); 
    } 
    return difference > 0 ? times.size()/difference : 0.0; 
} 
4

試試這個!

private long mLastTime = 0; 
private int fps = 0, ifps = 0; 
@Override 
protected void onDraw(Canvas canvas) { 
    long now = System.currentTimeMillis(); 

    // perform other operations 

    System.out.println("FPS:" + fps); 

    ifps++; 
    if(now > (mLastTime + 1000)) { 
     mLastTime = now; 
     fps = ifps; 
    ifps = 0; 
    } 
}