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

Commit 28ad7b52 authored by John Reck's avatar John Reck
Browse files

Fence on draws that are reported

Change-Id: Ib2ec16cbda40f40df1710bdc868869ea8301f17e
parent ce16215d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1226,6 +1226,11 @@ public class GLRenderer extends HardwareRenderer {
    }
    private static native void nSetDisplayListData(long displayList, long newData);

    @Override
    void fence() {
        // Everything is immediate, so this is a no-op
    }

    private RenderNode buildDisplayList(View view, HardwareCanvas canvas) {
        if (mDrawDelta <= 0) {
            return view.mRenderNode;
+5 −0
Original line number Diff line number Diff line
@@ -575,6 +575,11 @@ public abstract class HardwareRenderer {

    abstract void setDisplayListData(long displayList, long newData);

    /**
     * Blocks until all previously queued work has completed.
     */
    abstract void fence();

    /**
     * Describes a series of frames that should be drawn on screen as a graph.
     * Each frame is composed of 1 or more elements.
+7 −0
Original line number Diff line number Diff line
@@ -244,6 +244,11 @@ public class ThreadedRenderer extends HardwareRenderer {
    void setName(String name) {
    }

    @Override
    void fence() {
        nFence(mNativeProxy);
    }

    @Override
    protected void finalize() throws Throwable {
        try {
@@ -277,4 +282,6 @@ public class ThreadedRenderer extends HardwareRenderer {
    private static native long nCreateTextureLayer(long nativeProxy);
    private static native boolean nCopyLayerInto(long nativeProxy, long layer, long bitmap);
    private static native void nDestroyLayer(long nativeProxy, long layer);

    private static native void nFence(long nativeProxy);
}
+3 −0
Original line number Diff line number Diff line
@@ -2259,6 +2259,9 @@ public final class ViewRootImpl implements ViewParent,

        if (mReportNextDraw) {
            mReportNextDraw = false;
            if (mAttachInfo.mHardwareRenderer != null) {
                mAttachInfo.mHardwareRenderer.fence();
            }

            if (LOCAL_LOGV) {
                Log.v(TAG, "FINISHED DRAWING: " + mWindowAttributes.getTitle());
+7 −0
Original line number Diff line number Diff line
@@ -182,6 +182,12 @@ static void android_view_ThreadedRenderer_destroyLayer(JNIEnv* env, jobject claz
    proxy->destroyLayer(layer);
}

static void android_view_ThreadedRenderer_fence(JNIEnv* env, jobject clazz,
        jlong proxyPtr) {
    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
    proxy->fence();
}

#endif

// ----------------------------------------------------------------------------
@@ -209,6 +215,7 @@ static JNINativeMethod gMethods[] = {
    { "nCreateTextureLayer", "(J)J", (void*) android_view_ThreadedRenderer_createTextureLayer },
    { "nCopyLayerInto", "(JJJ)Z", (void*) android_view_ThreadedRenderer_copyLayerInto },
    { "nDestroyLayer", "(JJ)V", (void*) android_view_ThreadedRenderer_destroyLayer },
    { "nFence", "(J)V", (void*) android_view_ThreadedRenderer_fence },
#endif
};

Loading