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

Commit 81d29b5f authored by John Reck's avatar John Reck Committed by Android Git Automerger
Browse files

am 2d196d9f: Merge "Implement FlushCaches TODO" into lmp-preview-dev

* commit '2d196d9f9d4978fd0df80815e15012518be5ff18':
  Implement FlushCaches TODO
parents 0c70381d 45d01929
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ import java.io.PrintWriter;
/**
 * Hardware renderer that proxies the rendering to a render thread. Most calls
 * are currently synchronous.
 * TODO: Make draw() async.
 * TODO: Figure out how to share the DisplayList between two threads (global lock?)
 *
 * The UI thread can block on the RenderThread, but RenderThread must never
 * block on the UI thread.
@@ -117,7 +115,7 @@ public class ThreadedRenderer extends HardwareRenderer {
    @Override
    void destroyHardwareResources(View view) {
        destroyResources(view);
        // TODO: GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS);
        nFlushCaches(mNativeProxy, GLES20Canvas.FLUSH_CACHES_LAYERS);
    }

    private static void destroyResources(View view) {
@@ -368,6 +366,8 @@ public class ThreadedRenderer extends HardwareRenderer {
    private static native boolean nCopyLayerInto(long nativeProxy, long layer, long bitmap);
    private static native void nDestroyLayer(long nativeProxy, long layer);

    private static native void nFlushCaches(long nativeProxy, int flushMode);

    private static native void nFence(long nativeProxy);
    private static native void nNotifyFramePending(long nativeProxy);
}
+7 −0
Original line number Diff line number Diff line
@@ -293,6 +293,12 @@ static void android_view_ThreadedRenderer_destroyLayer(JNIEnv* env, jobject claz
    proxy->destroyLayer(layer);
}

static void android_view_ThreadedRenderer_flushCaches(JNIEnv* env, jobject clazz,
        jlong proxyPtr, jint flushMode) {
    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
    proxy->flushCaches(static_cast<Caches::FlushMode>(flushMode));
}

static void android_view_ThreadedRenderer_fence(JNIEnv* env, jobject clazz,
        jlong proxyPtr) {
    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
@@ -334,6 +340,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 },
    { "nFlushCaches", "(JI)V", (void*) android_view_ThreadedRenderer_flushCaches },
    { "nFence", "(J)V", (void*) android_view_ThreadedRenderer_fence },
    { "nNotifyFramePending", "(J)V", (void*) android_view_ThreadedRenderer_notifyFramePending },
#endif
+7 −0
Original line number Diff line number Diff line
@@ -556,6 +556,13 @@ bool CanvasContext::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap)
    return LayerRenderer::copyLayer(layer->backingLayer(), bitmap);
}

void CanvasContext::flushCaches(Caches::FlushMode flushMode) {
    if (mGlobalContext->hasContext()) {
        requireGlContext();
        Caches::getInstance().flush(flushMode);
    }
}

void CanvasContext::runWithGlContext(RenderTask* task) {
    requireGlContext();
    task->run();
+2 −0
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ public:

    bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap);

    void flushCaches(Caches::FlushMode flushMode);

    void invokeFunctor(Functor* functor);

    void runWithGlContext(RenderTask* task);
+12 −0
Original line number Diff line number Diff line
@@ -282,6 +282,18 @@ void RenderProxy::destroyLayer(DeferredLayerUpdater* layer) {
    post(task);
}

CREATE_BRIDGE2(flushCaches, CanvasContext* context, Caches::FlushMode flushMode) {
    args->context->flushCaches(args->flushMode);
    return NULL;
}

void RenderProxy::flushCaches(Caches::FlushMode flushMode) {
    SETUP_TASK(flushCaches);
    args->context = mContext;
    args->flushMode = flushMode;
    post(task);
}

CREATE_BRIDGE0(fence) {
    // Intentionally empty
    return NULL;
Loading