Loading core/java/android/view/ThreadedRenderer.java +3 −3 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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) { Loading Loading @@ -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); } core/jni/android_view_ThreadedRenderer.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading libs/hwui/renderthread/CanvasContext.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading libs/hwui/renderthread/CanvasContext.h +2 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,8 @@ public: bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap); void flushCaches(Caches::FlushMode flushMode); void invokeFunctor(Functor* functor); void runWithGlContext(RenderTask* task); Loading libs/hwui/renderthread/RenderProxy.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
core/java/android/view/ThreadedRenderer.java +3 −3 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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) { Loading Loading @@ -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); }
core/jni/android_view_ThreadedRenderer.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading
libs/hwui/renderthread/CanvasContext.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading
libs/hwui/renderthread/CanvasContext.h +2 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,8 @@ public: bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap); void flushCaches(Caches::FlushMode flushMode); void invokeFunctor(Functor* functor); void runWithGlContext(RenderTask* task); Loading
libs/hwui/renderthread/RenderProxy.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -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