Loading core/java/android/view/GLES20Canvas.java +16 −0 Original line number Diff line number Diff line Loading @@ -224,9 +224,25 @@ class GLES20Canvas extends HardwareCanvas { } } @Override void startTileRendering(Rect dirty) { if (dirty != null) { nStartTileRendering(mRenderer, dirty.left, dirty.top, dirty.right, dirty.bottom); } else { nStartTileRendering(mRenderer, 0, 0, 0, 0); } } @Override void endTileRendering() { nEndTileRendering(mRenderer); } private static native int nPrepare(int renderer, boolean opaque); private static native int nPrepareDirty(int renderer, int left, int top, int right, int bottom, boolean opaque); private static native void nStartTileRendering(int renderer, int left, int top, int right, int bottom); private static native void nEndTileRendering(int renderer); @Override public void onPostDraw() { Loading core/java/android/view/HardwareCanvas.java +2 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ public abstract class HardwareCanvas extends Canvas { * the canvas). */ public abstract int onPreDraw(Rect dirty); abstract void startTileRendering(Rect dirty); abstract void endTileRendering(); /** * Invoked after all drawing operation have been performed. Loading core/java/android/view/HardwareRenderer.java +38 −2 Original line number Diff line number Diff line Loading @@ -76,6 +76,15 @@ public abstract class HardwareRenderer { */ static final String RENDER_DIRTY_REGIONS_PROPERTY = "debug.hwui.render_dirty_regions"; /** * System property used to enable or disable tile rendering * * Possible values: * "true", to enable tile rendering * "false", to disable tile rendering */ static final String TILE_RENDERING_PROPERTY = "debug.enabletr"; /** * System property used to enable or disable vsync. * The default value of this property is assumed to be false. Loading Loading @@ -611,10 +620,16 @@ public abstract class HardwareRenderer { static boolean sDirtyRegions; static final boolean sDirtyRegionsRequested; static boolean sTileRendering; static { String dirtyProperty = SystemProperties.get(RENDER_DIRTY_REGIONS_PROPERTY, "true"); String trProperty = SystemProperties.get(TILE_RENDERING_PROPERTY, "true"); //noinspection PointlessBooleanExpression,ConstantConditions sDirtyRegions = RENDER_DIRTY_REGIONS && "true".equalsIgnoreCase(dirtyProperty); //enable dirty regions if tile-rendering enabled or dirty regions property enabled sTileRendering = "true".equalsIgnoreCase(trProperty); sDirtyRegions = RENDER_DIRTY_REGIONS && ("true".equalsIgnoreCase(dirtyProperty) || sTileRendering); sDirtyRegionsRequested = sDirtyRegions; } Loading Loading @@ -1054,6 +1069,12 @@ public abstract class HardwareRenderer { return mGl != null && mCanvas != null; } void startTileRendering(Rect dirty) { } void endTileRendering() { } int onPreDraw(Rect dirty) { return DisplayList.STATUS_DONE; } Loading Loading @@ -1118,6 +1139,9 @@ public abstract class HardwareRenderer { } } if (sTileRendering) startTileRendering(dirty); int status = onPreDraw(dirty); int saveCount = canvas.save(); callbacks.onHardwarePreDraw(canvas); Loading Loading @@ -1198,6 +1222,8 @@ public abstract class HardwareRenderer { } onPostDraw(); if (sTileRendering) endTileRendering(); attachInfo.mIgnoreDirtyState = false; Loading Loading @@ -1411,6 +1437,16 @@ public abstract class HardwareRenderer { mGlCanvas.onPostDraw(); } @Override void startTileRendering(Rect dirty) { mGlCanvas.startTileRendering(dirty); } @Override void endTileRendering() { mGlCanvas.endTileRendering(); } @Override void destroy(boolean full) { try { Loading core/jni/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -168,6 +168,7 @@ LOCAL_C_INCLUDES += \ $(JNI_H_INCLUDE) \ $(LOCAL_PATH)/android/graphics \ $(LOCAL_PATH)/../../libs/hwui \ hardware/qcom/display/libtilerenderer \ $(LOCAL_PATH)/../../../native/opengl/libs \ $(call include-path-for, bluedroid) \ $(call include-path-for, libhardware)/hardware \ Loading Loading @@ -226,7 +227,7 @@ LOCAL_SHARED_LIBRARIES := \ libz ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_SHARED_LIBRARIES += libhwui LOCAL_SHARED_LIBRARIES += libtilerenderer libhwui endif ifeq ($(BOARD_HAVE_BLUETOOTH),true) Loading core/jni/android_view_GLES20Canvas.cpp +23 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,9 @@ #include <SkiaShader.h> #include <SkiaColorFilter.h> #include <Rect.h> #ifdef QCOM_HARDWARE #include <tilerenderer.h> #endif #include <TextLayout.h> #include <TextLayoutCache.h> Loading Loading @@ -138,6 +140,24 @@ static int android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz, return renderer->prepare(opaque); } static void android_view_GLES20Canvas_startTileRendering(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom) { #ifdef QCOM_HARDWARE int width = 0, height = 0; if (renderer != NULL) { renderer->getViewport(width, height); } TileRenderer::getInstance().startTileRendering(left, top, right, bottom, width, height); #endif } static void android_view_GLES20Canvas_endTileRendering(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer) { #ifdef QCOM_HARDWARE TileRenderer::getInstance().endTileRendering(); #endif } static int android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom, jboolean opaque) { Loading Loading @@ -870,6 +890,8 @@ static JNINativeMethod gMethods[] = { { "nSetViewport", "(III)V", (void*) android_view_GLES20Canvas_setViewport }, { "nPrepare", "(IZ)I", (void*) android_view_GLES20Canvas_prepare }, { "nPrepareDirty", "(IIIIIZ)I", (void*) android_view_GLES20Canvas_prepareDirty }, { "nStartTileRendering","(IIIII)V", (void*) android_view_GLES20Canvas_startTileRendering}, { "nEndTileRendering", "(I)V", (void*) android_view_GLES20Canvas_endTileRendering}, { "nFinish", "(I)V", (void*) android_view_GLES20Canvas_finish }, { "nGetStencilSize", "()I", (void*) android_view_GLES20Canvas_getStencilSize }, Loading Loading
core/java/android/view/GLES20Canvas.java +16 −0 Original line number Diff line number Diff line Loading @@ -224,9 +224,25 @@ class GLES20Canvas extends HardwareCanvas { } } @Override void startTileRendering(Rect dirty) { if (dirty != null) { nStartTileRendering(mRenderer, dirty.left, dirty.top, dirty.right, dirty.bottom); } else { nStartTileRendering(mRenderer, 0, 0, 0, 0); } } @Override void endTileRendering() { nEndTileRendering(mRenderer); } private static native int nPrepare(int renderer, boolean opaque); private static native int nPrepareDirty(int renderer, int left, int top, int right, int bottom, boolean opaque); private static native void nStartTileRendering(int renderer, int left, int top, int right, int bottom); private static native void nEndTileRendering(int renderer); @Override public void onPostDraw() { Loading
core/java/android/view/HardwareCanvas.java +2 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ public abstract class HardwareCanvas extends Canvas { * the canvas). */ public abstract int onPreDraw(Rect dirty); abstract void startTileRendering(Rect dirty); abstract void endTileRendering(); /** * Invoked after all drawing operation have been performed. Loading
core/java/android/view/HardwareRenderer.java +38 −2 Original line number Diff line number Diff line Loading @@ -76,6 +76,15 @@ public abstract class HardwareRenderer { */ static final String RENDER_DIRTY_REGIONS_PROPERTY = "debug.hwui.render_dirty_regions"; /** * System property used to enable or disable tile rendering * * Possible values: * "true", to enable tile rendering * "false", to disable tile rendering */ static final String TILE_RENDERING_PROPERTY = "debug.enabletr"; /** * System property used to enable or disable vsync. * The default value of this property is assumed to be false. Loading Loading @@ -611,10 +620,16 @@ public abstract class HardwareRenderer { static boolean sDirtyRegions; static final boolean sDirtyRegionsRequested; static boolean sTileRendering; static { String dirtyProperty = SystemProperties.get(RENDER_DIRTY_REGIONS_PROPERTY, "true"); String trProperty = SystemProperties.get(TILE_RENDERING_PROPERTY, "true"); //noinspection PointlessBooleanExpression,ConstantConditions sDirtyRegions = RENDER_DIRTY_REGIONS && "true".equalsIgnoreCase(dirtyProperty); //enable dirty regions if tile-rendering enabled or dirty regions property enabled sTileRendering = "true".equalsIgnoreCase(trProperty); sDirtyRegions = RENDER_DIRTY_REGIONS && ("true".equalsIgnoreCase(dirtyProperty) || sTileRendering); sDirtyRegionsRequested = sDirtyRegions; } Loading Loading @@ -1054,6 +1069,12 @@ public abstract class HardwareRenderer { return mGl != null && mCanvas != null; } void startTileRendering(Rect dirty) { } void endTileRendering() { } int onPreDraw(Rect dirty) { return DisplayList.STATUS_DONE; } Loading Loading @@ -1118,6 +1139,9 @@ public abstract class HardwareRenderer { } } if (sTileRendering) startTileRendering(dirty); int status = onPreDraw(dirty); int saveCount = canvas.save(); callbacks.onHardwarePreDraw(canvas); Loading Loading @@ -1198,6 +1222,8 @@ public abstract class HardwareRenderer { } onPostDraw(); if (sTileRendering) endTileRendering(); attachInfo.mIgnoreDirtyState = false; Loading Loading @@ -1411,6 +1437,16 @@ public abstract class HardwareRenderer { mGlCanvas.onPostDraw(); } @Override void startTileRendering(Rect dirty) { mGlCanvas.startTileRendering(dirty); } @Override void endTileRendering() { mGlCanvas.endTileRendering(); } @Override void destroy(boolean full) { try { Loading
core/jni/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -168,6 +168,7 @@ LOCAL_C_INCLUDES += \ $(JNI_H_INCLUDE) \ $(LOCAL_PATH)/android/graphics \ $(LOCAL_PATH)/../../libs/hwui \ hardware/qcom/display/libtilerenderer \ $(LOCAL_PATH)/../../../native/opengl/libs \ $(call include-path-for, bluedroid) \ $(call include-path-for, libhardware)/hardware \ Loading Loading @@ -226,7 +227,7 @@ LOCAL_SHARED_LIBRARIES := \ libz ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_SHARED_LIBRARIES += libhwui LOCAL_SHARED_LIBRARIES += libtilerenderer libhwui endif ifeq ($(BOARD_HAVE_BLUETOOTH),true) Loading
core/jni/android_view_GLES20Canvas.cpp +23 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,9 @@ #include <SkiaShader.h> #include <SkiaColorFilter.h> #include <Rect.h> #ifdef QCOM_HARDWARE #include <tilerenderer.h> #endif #include <TextLayout.h> #include <TextLayoutCache.h> Loading Loading @@ -138,6 +140,24 @@ static int android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz, return renderer->prepare(opaque); } static void android_view_GLES20Canvas_startTileRendering(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom) { #ifdef QCOM_HARDWARE int width = 0, height = 0; if (renderer != NULL) { renderer->getViewport(width, height); } TileRenderer::getInstance().startTileRendering(left, top, right, bottom, width, height); #endif } static void android_view_GLES20Canvas_endTileRendering(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer) { #ifdef QCOM_HARDWARE TileRenderer::getInstance().endTileRendering(); #endif } static int android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom, jboolean opaque) { Loading Loading @@ -870,6 +890,8 @@ static JNINativeMethod gMethods[] = { { "nSetViewport", "(III)V", (void*) android_view_GLES20Canvas_setViewport }, { "nPrepare", "(IZ)I", (void*) android_view_GLES20Canvas_prepare }, { "nPrepareDirty", "(IIIIIZ)I", (void*) android_view_GLES20Canvas_prepareDirty }, { "nStartTileRendering","(IIIII)V", (void*) android_view_GLES20Canvas_startTileRendering}, { "nEndTileRendering", "(I)V", (void*) android_view_GLES20Canvas_endTileRendering}, { "nFinish", "(I)V", (void*) android_view_GLES20Canvas_finish }, { "nGetStencilSize", "()I", (void*) android_view_GLES20Canvas_getStencilSize }, Loading