mirror of
https://github.com/libretro/RetroArch
synced 2025-02-09 09:39:56 +00:00
126 lines
3.5 KiB
Java
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();
|
|
}
|
|
}
|