1
我有一個第三方框架,顯示在SurfaceView上的視頻。我想測量視頻的幀率,以檢查手機是否能夠足夠快地顯示視頻,或者是否需要使用其他解決方案向用戶顯示信息。如何計算SurfaceView刷新的幀率?
我怎麼能衡量一個SurfaceView的更新速度是多少?
我有一個第三方框架,顯示在SurfaceView上的視頻。我想測量視頻的幀率,以檢查手機是否能夠足夠快地顯示視頻,或者是否需要使用其他解決方案向用戶顯示信息。如何計算SurfaceView刷新的幀率?
我怎麼能衡量一個SurfaceView的更新速度是多少?
如果代碼是不明確的只是問。
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;
}
試試這個!
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;
}
}
這個答案可能幫助.. http://stackoverflow.com/questions/13498184/editing-android-videoview-frames/13667582覆蓋draw方法.. – Ronnie 2012-12-04 15:54:40