Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e64c63b3 authored by Rajulu Ponnada's avatar Rajulu Ponnada Committed by Steve Kondik
Browse files

frameworks/base: support for qcom application tiling

Support for tiled rendering, can be disabled or enabled with
debug.enabletr property.

Change-Id: Id49301f9dbafc6ef2e44170c95818caee199c03c
parent 594bdd31
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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() {
+2 −0
Original line number Diff line number Diff line
@@ -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.
+38 −2
Original line number Diff line number Diff line
@@ -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.
@@ -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;
        }

@@ -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;
        }
@@ -1118,6 +1139,9 @@ public abstract class HardwareRenderer {
                        }
                    }

                    if (sTileRendering)
                        startTileRendering(dirty);

                    int status = onPreDraw(dirty);
                    int saveCount = canvas.save();
                    callbacks.onHardwarePreDraw(canvas);
@@ -1198,6 +1222,8 @@ public abstract class HardwareRenderer {
                    }

                    onPostDraw();
                    if (sTileRendering)
                        endTileRendering();

                    attachInfo.mIgnoreDirtyState = false;
                    
@@ -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 {
+2 −1
Original line number Diff line number Diff line
@@ -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 \
@@ -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)
+23 −1
Original line number Diff line number Diff line
@@ -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>

@@ -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) {
@@ -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