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

Commit 89b88384 authored by Chet Haase's avatar Chet Haase Committed by Android Git Automerger
Browse files

am ca43c961: am 44b2fe3f: Track canvas clearing for swap buffers logic.

* commit 'ca43c961':
  Track canvas clearing for swap buffers logic.
parents 29b9885c ca43c961
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -215,16 +215,17 @@ class GLES20Canvas extends HardwareCanvas {
    private static native void nSetViewport(int renderer, int width, int height);

    @Override
    public void onPreDraw(Rect dirty) {
    public int onPreDraw(Rect dirty) {
        if (dirty != null) {
            nPrepareDirty(mRenderer, dirty.left, dirty.top, dirty.right, dirty.bottom, mOpaque);
            return nPrepareDirty(mRenderer, dirty.left, dirty.top, dirty.right, dirty.bottom,
                    mOpaque);
        } else {
            nPrepare(mRenderer, mOpaque);
            return nPrepare(mRenderer, mOpaque);
        }
    }

    private static native void nPrepare(int renderer, boolean opaque);
    private static native void nPrepareDirty(int renderer, int left, int top, int right, int bottom,
    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);

    @Override
+6 −3
Original line number Diff line number Diff line
@@ -41,8 +41,10 @@ public abstract class HardwareCanvas extends Canvas {
     * Invoked before any drawing operation is performed in this canvas.
     * 
     * @param dirty The dirty rectangle to update, can be null.
     * @return {@link DisplayList#STATUS_DREW} if anything was drawn (such as a call to clear
     * the canvas).
     */
    public abstract void onPreDraw(Rect dirty);
    public abstract int onPreDraw(Rect dirty);

    /**
     * Invoked after all drawing operation have been performed.
@@ -58,8 +60,9 @@ public abstract class HardwareCanvas extends Canvas {
     * @param flags Optional flags about drawing, see {@link DisplayList} for
     *              the possible flags.
     *
     * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or
     *         {@link DisplayList#STATUS_INVOKE}
     * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW}, or
     *         {@link DisplayList#STATUS_INVOKE}, or'd with {@link DisplayList#STATUS_DREW}
     *         if anything was drawn.
     */
    public abstract int drawDisplayList(DisplayList displayList, Rect dirty, int flags);

+6 −8
Original line number Diff line number Diff line
@@ -1042,8 +1042,8 @@ public abstract class HardwareRenderer {
            return mGl != null && mCanvas != null;
        }        
        
        void onPreDraw(Rect dirty) {
            
        int onPreDraw(Rect dirty) {
            return DisplayList.STATUS_DONE;
        }

        void onPostDraw() {
@@ -1102,9 +1102,7 @@ public abstract class HardwareRenderer {
                        }
                    }

                    onPreDraw(dirty);

                    int status = DisplayList.STATUS_DONE;
                    int status = onPreDraw(dirty);
                    int saveCount = canvas.save();
                    callbacks.onHardwarePreDraw(canvas);

@@ -1138,7 +1136,7 @@ public abstract class HardwareRenderer {
                                drawDisplayListStartTime = System.nanoTime();
                            }

                            status = canvas.drawDisplayList(displayList, mRedrawClip,
                            status |= canvas.drawDisplayList(displayList, mRedrawClip,
                                    DisplayList.FLAG_CLIP_CHILDREN);

                            if (mProfileEnabled) {
@@ -1372,8 +1370,8 @@ public abstract class HardwareRenderer {
        }                

        @Override
        void onPreDraw(Rect dirty) {
            mGlCanvas.onPreDraw(dirty);
        int onPreDraw(Rect dirty) {
            return mGlCanvas.onPreDraw(dirty);
        }

        @Override
+6 −6
Original line number Diff line number Diff line
@@ -133,15 +133,15 @@ static void android_view_GLES20Canvas_setViewport(JNIEnv* env, jobject clazz,
    renderer->setViewport(width, height);
}

static void android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz,
static int android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer, jboolean opaque) {
    renderer->prepare(opaque);
    return renderer->prepare(opaque);
}

static void android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz,
static int android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom,
        jboolean opaque) {
    renderer->prepareDirty(left, top, right, bottom, opaque);
    return renderer->prepareDirty(left, top, right, bottom, opaque);
}

static void android_view_GLES20Canvas_finish(JNIEnv* env, jobject clazz,
@@ -868,8 +868,8 @@ static JNINativeMethod gMethods[] = {
    { "nCreateRenderer",    "()I",             (void*) android_view_GLES20Canvas_createRenderer },
    { "nDestroyRenderer",   "(I)V",            (void*) android_view_GLES20Canvas_destroyRenderer },
    { "nSetViewport",       "(III)V",          (void*) android_view_GLES20Canvas_setViewport },
    { "nPrepare",           "(IZ)V",           (void*) android_view_GLES20Canvas_prepare },
    { "nPrepareDirty",      "(IIIIIZ)V",       (void*) android_view_GLES20Canvas_prepareDirty },
    { "nPrepare",           "(IZ)I",           (void*) android_view_GLES20Canvas_prepare },
    { "nPrepareDirty",      "(IIIIIZ)I",       (void*) android_view_GLES20Canvas_prepareDirty },
    { "nFinish",            "(I)V",            (void*) android_view_GLES20Canvas_finish },

    { "nGetStencilSize",    "()I",             (void*) android_view_GLES20Canvas_getStencilSize },
+2 −1
Original line number Diff line number Diff line
@@ -1368,13 +1368,14 @@ void DisplayListRenderer::setViewport(int width, int height) {
    mHeight = height;
}

void DisplayListRenderer::prepareDirty(float left, float top,
int DisplayListRenderer::prepareDirty(float left, float top,
        float right, float bottom, bool opaque) {
    mSnapshot = new Snapshot(mFirstSnapshot,
            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
    mSaveCount = 1;
    mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight);
    mRestoreSaveCount = -1;
    return DrawGlInfo::kStatusDone; // No invalidate needed at record-time
}

void DisplayListRenderer::finish() {
Loading