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

Commit 7159b9f6 authored by Rajulu Ponnada's avatar Rajulu Ponnada Committed by toastcfh
Browse files

frameworks/base: support for QCOM tiled rendering

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

Change-Id: I2bd94aa3480f62c6f4089d722e318481013495fd
parent bceeddde
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -254,9 +254,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 void nPrepare(int renderer, boolean opaque);
    private static native void 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
    void onPostDraw() {
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ public abstract class HardwareCanvas extends Canvas {
     * @param dirty The dirty rectangle to update, can be null.
     */
    abstract void 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
@@ -73,6 +73,15 @@ public abstract class HardwareRenderer {
     */
    static final String RENDER_DIRTY_REGIONS_PROPERTY = "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.
@@ -433,10 +442,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, "false");
            //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;
        }

@@ -799,6 +814,12 @@ public abstract class HardwareRenderer {
            return mGl != null && mCanvas != null;
        }        
        
        void startTileRendering(Rect dirty) {
        }

        void endTileRendering() {
        }

        void onPreDraw(Rect dirty) {
        }

@@ -824,6 +845,9 @@ public abstract class HardwareRenderer {
                        dirty = null;
                    }

                    if (sTileRendering)
                        startTileRendering(dirty);

                    onPreDraw(dirty);

                    HardwareCanvas canvas = mCanvas;
@@ -869,6 +893,8 @@ public abstract class HardwareRenderer {
                    }

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

                    attachInfo.mIgnoreDirtyState = false;

@@ -1019,6 +1045,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 {

core/jni/Android.mk

100644 → 100755
+2 −1
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ LOCAL_C_INCLUDES += \
	$(LOCAL_PATH)/android/graphics \
	$(LOCAL_PATH)/../../libs/hwui \
	$(LOCAL_PATH)/../../opengl/libs \
	hardware/qcom/display/libtilerenderer \
	$(call include-path-for, bluedroid) \
	$(call include-path-for, libhardware)/hardware \
	$(call include-path-for, libhardware_legacy)/hardware_legacy \
@@ -219,7 +220,7 @@ LOCAL_SHARED_LIBRARIES := \
	libz \

ifeq ($(USE_OPENGL_RENDERER),true)
	LOCAL_SHARED_LIBRARIES += libhwui
	LOCAL_SHARED_LIBRARIES += libhwui libtilerenderer
endif

ifeq ($(BOARD_HAVE_BLUETOOTH),true)
+13 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@
#include <SkiaShader.h>
#include <SkiaColorFilter.h>
#include <Rect.h>
#include <tilerenderer.h>

#include <TextLayout.h>

@@ -176,6 +177,16 @@ static void android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz,
    renderer->prepare(opaque);
}

static void android_view_GLES20Canvas_startTileRendering(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom) {
    TileRenderer::getInstance().startTileRendering(renderer, left, top, right, bottom);
}

static void android_view_GLES20Canvas_endTileRendering(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer) {
    TileRenderer::getInstance().endTileRendering(renderer);
}

static void android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom,
        jboolean opaque) {
@@ -785,6 +796,8 @@ static JNINativeMethod gMethods[] = {
    { "nSetViewport",       "(III)V",          (void*) android_view_GLES20Canvas_setViewport },
    { "nPrepare",           "(IZ)V",           (void*) android_view_GLES20Canvas_prepare },
    { "nPrepareDirty",      "(IIIIIZ)V",       (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 },

    { "nCallDrawGLFunction", "(II)Z",
Loading