Loading core/java/android/view/HardwareRenderer.java +21 −7 Original line number Diff line number Diff line Loading @@ -274,12 +274,13 @@ public abstract class HardwareRenderer { /** * Notifies EGL that the frame is about to be rendered. * @param size */ private static void beginFrame() { nBeginFrame(); private static void beginFrame(int[] size) { nBeginFrame(size); } private static native void nBeginFrame(); private static native void nBeginFrame(int[] size); /** * Preserves the back buffer of the current surface after a buffer swap. Loading Loading @@ -541,6 +542,7 @@ public abstract class HardwareRenderer { private boolean mDestroyed; private final Rect mRedrawClip = new Rect(); private final int[] mSurfaceSize = new int[2]; GlRenderer(int glVersion, boolean translucent) { mGlVersion = glVersion; Loading Loading @@ -957,17 +959,29 @@ public abstract class HardwareRenderer { final int surfaceState = checkCurrent(); if (surfaceState != SURFACE_STATE_ERROR) { HardwareCanvas canvas = mCanvas; attachInfo.mHardwareCanvas = canvas; // We had to change the current surface and/or context, redraw everything if (surfaceState == SURFACE_STATE_UPDATED) { dirty = null; beginFrame(null); } else { int[] size = mSurfaceSize; beginFrame(size); if (size[1] != mHeight || size[0] != mWidth) { mWidth = size[0]; mHeight = size[1]; canvas.setViewport(mWidth, mHeight); dirty = null; } } beginFrame(); onPreDraw(dirty); HardwareCanvas canvas = mCanvas; attachInfo.mHardwareCanvas = canvas; int saveCount = canvas.save(); callbacks.onHardwarePreDraw(canvas); Loading core/jni/android_view_HardwareRenderer.cpp +25 −13 Original line number Diff line number Diff line Loading @@ -99,10 +99,26 @@ static void android_view_HardwareRenderer_disableVsync(JNIEnv* env, jobject claz // Tracing and debugging // ---------------------------------------------------------------------------- static void android_view_HardwareRenderer_beginFrame(JNIEnv* env, jobject clazz) { EGLDisplay dpy = eglGetCurrentDisplay(); EGLSurface surf = eglGetCurrentSurface(EGL_DRAW); eglBeginFrame(dpy, surf); static void android_view_HardwareRenderer_beginFrame(JNIEnv* env, jobject clazz, jintArray size) { EGLDisplay display = eglGetCurrentDisplay(); EGLSurface surface = eglGetCurrentSurface(EGL_DRAW); if (size) { EGLint value; jint* storage = env->GetIntArrayElements(size, NULL); eglQuerySurface(display, surface, EGL_WIDTH, &value); storage[0] = value; eglQuerySurface(display, surface, EGL_HEIGHT, &value); storage[1] = value; env->ReleaseIntArrayElements(size, storage, 0); } eglBeginFrame(display, surface); } #endif // USE_OPENGL_RENDERER Loading @@ -127,15 +143,11 @@ const char* const kClassPathName = "android/view/HardwareRenderer"; static JNINativeMethod gMethods[] = { #ifdef USE_OPENGL_RENDERER { "nIsBackBufferPreserved", "()Z", (void*) android_view_HardwareRenderer_isBackBufferPreserved }, { "nPreserveBackBuffer", "()Z", (void*) android_view_HardwareRenderer_preserveBackBuffer }, { "nDisableVsync", "()V", (void*) android_view_HardwareRenderer_disableVsync }, { "nBeginFrame", "()V", (void*) android_view_HardwareRenderer_beginFrame }, { "nIsBackBufferPreserved", "()Z", (void*) android_view_HardwareRenderer_isBackBufferPreserved }, { "nPreserveBackBuffer", "()Z", (void*) android_view_HardwareRenderer_preserveBackBuffer }, { "nDisableVsync", "()V", (void*) android_view_HardwareRenderer_disableVsync }, { "nBeginFrame", "([I)V", (void*) android_view_HardwareRenderer_beginFrame }, #endif { "nSetupShadersDiskCache", "(Ljava/lang/String;)V", Loading Loading
core/java/android/view/HardwareRenderer.java +21 −7 Original line number Diff line number Diff line Loading @@ -274,12 +274,13 @@ public abstract class HardwareRenderer { /** * Notifies EGL that the frame is about to be rendered. * @param size */ private static void beginFrame() { nBeginFrame(); private static void beginFrame(int[] size) { nBeginFrame(size); } private static native void nBeginFrame(); private static native void nBeginFrame(int[] size); /** * Preserves the back buffer of the current surface after a buffer swap. Loading Loading @@ -541,6 +542,7 @@ public abstract class HardwareRenderer { private boolean mDestroyed; private final Rect mRedrawClip = new Rect(); private final int[] mSurfaceSize = new int[2]; GlRenderer(int glVersion, boolean translucent) { mGlVersion = glVersion; Loading Loading @@ -957,17 +959,29 @@ public abstract class HardwareRenderer { final int surfaceState = checkCurrent(); if (surfaceState != SURFACE_STATE_ERROR) { HardwareCanvas canvas = mCanvas; attachInfo.mHardwareCanvas = canvas; // We had to change the current surface and/or context, redraw everything if (surfaceState == SURFACE_STATE_UPDATED) { dirty = null; beginFrame(null); } else { int[] size = mSurfaceSize; beginFrame(size); if (size[1] != mHeight || size[0] != mWidth) { mWidth = size[0]; mHeight = size[1]; canvas.setViewport(mWidth, mHeight); dirty = null; } } beginFrame(); onPreDraw(dirty); HardwareCanvas canvas = mCanvas; attachInfo.mHardwareCanvas = canvas; int saveCount = canvas.save(); callbacks.onHardwarePreDraw(canvas); Loading
core/jni/android_view_HardwareRenderer.cpp +25 −13 Original line number Diff line number Diff line Loading @@ -99,10 +99,26 @@ static void android_view_HardwareRenderer_disableVsync(JNIEnv* env, jobject claz // Tracing and debugging // ---------------------------------------------------------------------------- static void android_view_HardwareRenderer_beginFrame(JNIEnv* env, jobject clazz) { EGLDisplay dpy = eglGetCurrentDisplay(); EGLSurface surf = eglGetCurrentSurface(EGL_DRAW); eglBeginFrame(dpy, surf); static void android_view_HardwareRenderer_beginFrame(JNIEnv* env, jobject clazz, jintArray size) { EGLDisplay display = eglGetCurrentDisplay(); EGLSurface surface = eglGetCurrentSurface(EGL_DRAW); if (size) { EGLint value; jint* storage = env->GetIntArrayElements(size, NULL); eglQuerySurface(display, surface, EGL_WIDTH, &value); storage[0] = value; eglQuerySurface(display, surface, EGL_HEIGHT, &value); storage[1] = value; env->ReleaseIntArrayElements(size, storage, 0); } eglBeginFrame(display, surface); } #endif // USE_OPENGL_RENDERER Loading @@ -127,15 +143,11 @@ const char* const kClassPathName = "android/view/HardwareRenderer"; static JNINativeMethod gMethods[] = { #ifdef USE_OPENGL_RENDERER { "nIsBackBufferPreserved", "()Z", (void*) android_view_HardwareRenderer_isBackBufferPreserved }, { "nPreserveBackBuffer", "()Z", (void*) android_view_HardwareRenderer_preserveBackBuffer }, { "nDisableVsync", "()V", (void*) android_view_HardwareRenderer_disableVsync }, { "nBeginFrame", "()V", (void*) android_view_HardwareRenderer_beginFrame }, { "nIsBackBufferPreserved", "()Z", (void*) android_view_HardwareRenderer_isBackBufferPreserved }, { "nPreserveBackBuffer", "()Z", (void*) android_view_HardwareRenderer_preserveBackBuffer }, { "nDisableVsync", "()V", (void*) android_view_HardwareRenderer_disableVsync }, { "nBeginFrame", "([I)V", (void*) android_view_HardwareRenderer_beginFrame }, #endif { "nSetupShadersDiskCache", "(Ljava/lang/String;)V", Loading