| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.testframerate; |
| |
| import android.content.Context; |
| import android.opengl.GLSurfaceView; |
| import android.os.SystemProperties; |
| import android.util.AttributeSet; |
| import android.util.Log; |
| import android.view.KeyEvent; |
| import android.view.MotionEvent; |
| |
| import java.nio.ByteBuffer; |
| import java.nio.ByteOrder; |
| import java.nio.FloatBuffer; |
| |
| import javax.microedition.khronos.egl.EGL10; |
| import javax.microedition.khronos.egl.EGLConfig; |
| import javax.microedition.khronos.egl.EGLContext; |
| import javax.microedition.khronos.egl.EGLDisplay; |
| import javax.microedition.khronos.opengles.GL10; |
| |
| import android.opengl.GLES20; |
| |
| class TestFramerateView extends GLSurfaceView { |
| private static String TAG = "TestFramerateView"; |
| |
| public TestFramerateView(Context context) { |
| super(context); |
| setEGLContextClientVersion(2); |
| setRenderer(new Renderer()); |
| } |
| |
| private long mLastTime_us = 0; |
| private long mNumShortFramesElapsed = 0; |
| private void registerTime(long now_us) { |
| long longFrameTime_ms = Integer.parseInt(SystemProperties.get("debug.longframe_ms", "16")); |
| long elapsedTime_us = now_us - mLastTime_us; |
| float fps = 1000000.f / elapsedTime_us; |
| if (mLastTime_us > 0 && elapsedTime_us > longFrameTime_ms*1000) { |
| Log.v(TAG, "Long frame: " + elapsedTime_us/1000.f + " ms (" + fps + " fps)"); |
| if (mNumShortFramesElapsed > 0) { |
| Log.v(TAG, " Short frames since last long frame: " + mNumShortFramesElapsed); |
| mNumShortFramesElapsed = 0; |
| } |
| } else { |
| ++mNumShortFramesElapsed; |
| } |
| |
| mLastTime_us = now_us; |
| } |
| |
| private class Renderer implements GLSurfaceView.Renderer { |
| public Renderer() { |
| } |
| |
| |
| public void onDrawFrame(GL10 gl) { |
| long now_us = System.nanoTime() / 1000; |
| registerTime(now_us); |
| |
| float red = (now_us % 1000000) / 1000000.f; |
| float green = (now_us % 2000000) / 2000000.f; |
| float blue = (now_us % 3000000) / 3000000.f; |
| GLES20.glClearColor(red, green, blue, 1.0f); |
| GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); |
| } |
| |
| public void onSurfaceChanged(GL10 gl, int width, int height) { |
| GLES20.glViewport(0, 0, width, height); |
| } |
| |
| public void onSurfaceCreated(GL10 gl, EGLConfig config) { |
| } |
| |
| } |
| } |