RetroArch/android/phoenix/src/org/retroarch/browser/DisplayRefreshRateTest.java
Themaister 20554b3ea2 Remove redundant Java GL code.
Not used in Google example code.
2013-02-17 23:44:04 +01:00

126 lines
3.5 KiB
Java

package org.retroarch.browser;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.content.SharedPreferences;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.WindowManager;
import android.widget.Toast;
public class DisplayRefreshRateTest extends Activity {
private class Renderer implements GLSurfaceView.Renderer {
private static final String TAG = "GLESRenderer";
private static final double WARMUP_SECONDS = 2.0;
private static final double TEST_SECONDS = 10.0;
// Test states
private static final int STATE_START = 0;
private static final int STATE_WARMUP = 1;
private static final int STATE_TEST = 2;
private static final int STATE_DONE = 3;
private static final int STATE_DEAD = 4;
private int mState = STATE_START;
private double mStartTime = 0.0;
private int mNumFrames = 0;
private Activity activity;
public Renderer(Activity activity) {
this.activity = activity;
}
private void setFPSSetting(double fps) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor edit = prefs.edit();
edit.putString("video_refresh_rate", Double.valueOf(fps).toString());
edit.commit();
}
@Override
public void onDrawFrame(GL10 gl) {
double t = System.nanoTime() * 1.0e-9;
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++;
double elapsed = t - mStartTime;
if (elapsed >= TEST_SECONDS) {
double fps = (double)mNumFrames / elapsed;
Log.i(TAG, "Measured FPS to: " + fps);
setFPSSetting(fps);
mState = STATE_DONE;
}
break;
case STATE_DONE:
activity.runOnUiThread(new Runnable() {
public void run() {
finish();
}
});
mState = STATE_DEAD;
break;
case STATE_DEAD:
break;
}
float luma = (float)Math.sin((double)mNumFrames * 0.10);
luma *= 0.2f;
luma += 0.5f;
GLES20.glClearColor(luma, luma, luma, 1.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// TODO Auto-generated method stub
}
}
private GLSurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "Touch the screen with your fingers for more accurate measurements.", Toast.LENGTH_LONG).show();
surfaceView = new GLSurfaceView(this);
surfaceView.setEGLContextClientVersion(2);
surfaceView.setRenderer(new Renderer(this));
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setTitle("Refresh rate calibration");
setContentView(surfaceView);
}
@Override
protected void onDestroy() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String fps = prefs.getString("video_refresh_rate", "ERROR");
Toast.makeText(this, "Refresh rate measured to: " + fps + " Hz.", Toast.LENGTH_LONG).show();
super.onDestroy();
}
}