public void testRefreshRate() throws java.lang.InterruptedException { boolean fpsOk = false; GLSurfaceViewStubActivity activity = getActivity(); WindowManager wm = (WindowManager) activity.getView().getContext().getSystemService(Context.WINDOW_SERVICE); Display dpy = wm.getDefaultDisplay(); float claimedFps = dpy.getRefreshRate(); for (int i = 0; i < 3; i++) { float achievedFps = mResult.waitResult(); Log.d(TAG, "claimed " + claimedFps + " fps, " + "achieved " + achievedFps + " fps"); fpsOk = Math.abs(claimedFps - achievedFps) <= FPS_TOLERANCE; if (fpsOk) { break; } else { // it could be other sctivity like bug report capturing for other failures // sleep for a while and re-try Thread.sleep(10000); mResult.restart(); } } activity.finish(); assertTrue(fpsOk); }
public void onDrawFrame(GL10 gl) { float t = (float) System.nanoTime() * 1.0e-9f; switch (mState) { case STATE_START: mStartTime = t; mState = STATE_WARMUP; break; case STATE_WARMUP: if ((t - mStartTime) >= WARMUP_SECONDS) { mStartTime = t; mNumFrames = 0; mState = STATE_TEST; } break; case STATE_TEST: mNumFrames++; float elapsed = t - mStartTime; if (elapsed >= TEST_SECONDS) { mResult.notifyResult((float) mNumFrames / elapsed); mState = STATE_DONE; } break; case STATE_DONE: if (mResult.restartNecessary()) { mResult.ackRestart(); mState = STATE_START; Log.d(TAG, "restarting"); } break; } // prevent unwanted optimizations or hidden costs (e.g. reading // previous frame on tilers). gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.glClear(gl.GL_COLOR_BUFFER_BIT); }