diff options
author | Romain Guy <romainguy@google.com> | 2011-03-07 18:06:46 -0800 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2011-03-07 18:09:03 -0800 |
commit | cabfcc1364eb7e4de0b15b3574fba45027b45cfc (patch) | |
tree | f38e237ba2009dcacb5082a99928aad379a7adc0 /core/jni | |
parent | 9b7146db6d9c0586b98b062fbcdb3fac6cc54d19 (diff) | |
download | frameworks_base-cabfcc1364eb7e4de0b15b3574fba45027b45cfc.zip frameworks_base-cabfcc1364eb7e4de0b15b3574fba45027b45cfc.tar.gz frameworks_base-cabfcc1364eb7e4de0b15b3574fba45027b45cfc.tar.bz2 |
Add support for partial invalidates in WebView
Bug #3461349
This change also fixes two bugs that prevented partial invalidates
from working with other views. Both bugs were in our EGL implementation:
they were preventing the caller from comparing the current context/surface
with another context/surface. This was causing HardwareRenderer to always
redraw the entire screen.
Change-Id: I33e096b304d4a0b7e6c8f92930f71d2ece9bebf5
Diffstat (limited to 'core/jni')
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index 7a609a5..a78f660 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -35,7 +35,6 @@ #include <DisplayListRenderer.h> #include <LayerRenderer.h> -#include <OpenGLDebugRenderer.h> #include <OpenGLRenderer.h> #include <SkiaShader.h> #include <SkiaColorFilter.h> @@ -60,7 +59,6 @@ using namespace uirenderer; // Debug #define DEBUG_RENDERER 0 -#define PROFILE_RENDERER 0 // Debug #if DEBUG_RENDERER @@ -99,11 +97,7 @@ static jboolean android_view_GLES20Canvas_preserveBackBuffer(JNIEnv* env, jobjec static OpenGLRenderer* android_view_GLES20Canvas_createRenderer(JNIEnv* env, jobject clazz) { RENDERER_LOGD("Create OpenGLRenderer"); -#if PROFILE_RENDERER - return new OpenGLDebugRenderer; -#else return new OpenGLRenderer; -#endif } static void android_view_GLES20Canvas_destroyRenderer(JNIEnv* env, jobject clazz, @@ -139,7 +133,8 @@ static void android_view_GLES20Canvas_finish(JNIEnv* env, jobject clazz, static bool android_view_GLES20Canvas_callDrawGLFunction(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, Functor *functor) { - return renderer->callDrawGLFunction(functor); + android::uirenderer::Rect dirty; + return renderer->callDrawGLFunction(functor, dirty); } // ---------------------------------------------------------------------------- @@ -503,8 +498,14 @@ static void android_view_GLES20Canvas_destroyDisplayList(JNIEnv* env, } static bool android_view_GLES20Canvas_drawDisplayList(JNIEnv* env, - jobject clazz, OpenGLRenderer* renderer, DisplayList* displayList) { - return renderer->drawDisplayList(displayList); + jobject clazz, OpenGLRenderer* renderer, DisplayList* displayList, jobject dirty) { + android::uirenderer::Rect bounds; + bool redraw = renderer->drawDisplayList(displayList, bounds); + if (redraw && dirty != NULL) { + env->CallVoidMethod(dirty, gRectClassInfo.set, + int(bounds.left), int(bounds.top), int(bounds.right), int(bounds.bottom)); + } + return redraw; } // ---------------------------------------------------------------------------- @@ -663,7 +664,8 @@ static JNINativeMethod gMethods[] = { { "nGetDisplayList", "(I)I", (void*) android_view_GLES20Canvas_getDisplayList }, { "nDestroyDisplayList", "(I)V", (void*) android_view_GLES20Canvas_destroyDisplayList }, { "nGetDisplayListRenderer", "(I)I", (void*) android_view_GLES20Canvas_getDisplayListRenderer }, - { "nDrawDisplayList", "(II)Z", (void*) android_view_GLES20Canvas_drawDisplayList }, + { "nDrawDisplayList", "(IILandroid/graphics/Rect;)Z", + (void*) android_view_GLES20Canvas_drawDisplayList }, { "nInterrupt", "(I)V", (void*) android_view_GLES20Canvas_interrupt }, { "nResume", "(I)V", (void*) android_view_GLES20Canvas_resume }, |