Loading libs/hwui/jni/android_graphics_HardwareRenderer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -247,7 +247,7 @@ static jlong android_view_ThreadedRenderer_createProxy(JNIEnv* env, jobject claz static void android_view_ThreadedRenderer_deleteProxy(JNIEnv* env, jobject clazz, jlong proxyPtr) { RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); delete proxy; RenderProxy::asyncDelete(proxy); } static jboolean android_view_ThreadedRenderer_loadSystemProperties(JNIEnv* env, jobject clazz, Loading libs/hwui/renderthread/RenderProxy.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "renderthread/CanvasContext.h" #include "renderthread/RenderTask.h" #include "renderthread/RenderThread.h" #include "thread/CommonPool.h" #include "utils/Macros.h" #include "utils/TimeUtils.h" Loading @@ -42,6 +43,17 @@ RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode, mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode); } void RenderProxy::asyncDelete(RenderProxy* proxy) { if (!proxy) return; if (proxy->mContext) { // Use the common pool because ~RenderProxy blocks on calling into RenderThread CommonPool::post([proxy]() { delete proxy; }); } else { delete proxy; } } RenderProxy::~RenderProxy() { destroyContext(); } Loading libs/hwui/renderthread/RenderProxy.h +6 −2 Original line number Diff line number Diff line Loading @@ -62,10 +62,14 @@ enum { * references RenderProxy fields. This is safe as RenderProxy cannot * be deleted if it is blocked inside a call. */ class RenderProxy { class RenderProxy final { public: RenderProxy(bool opaque, RenderNode* rootNode, IContextFactory* contextFactory); virtual ~RenderProxy(); ~RenderProxy(); // Schedules a delete of the RenderProxy at a later date. Avoids blocking the current thread // on destruction which ~RenderProxy does by default. static void asyncDelete(RenderProxy*); // Won't take effect until next EGLSurface creation void setSwapBehavior(SwapBehavior swapBehavior); Loading Loading
libs/hwui/jni/android_graphics_HardwareRenderer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -247,7 +247,7 @@ static jlong android_view_ThreadedRenderer_createProxy(JNIEnv* env, jobject claz static void android_view_ThreadedRenderer_deleteProxy(JNIEnv* env, jobject clazz, jlong proxyPtr) { RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); delete proxy; RenderProxy::asyncDelete(proxy); } static jboolean android_view_ThreadedRenderer_loadSystemProperties(JNIEnv* env, jobject clazz, Loading
libs/hwui/renderthread/RenderProxy.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "renderthread/CanvasContext.h" #include "renderthread/RenderTask.h" #include "renderthread/RenderThread.h" #include "thread/CommonPool.h" #include "utils/Macros.h" #include "utils/TimeUtils.h" Loading @@ -42,6 +43,17 @@ RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode, mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode); } void RenderProxy::asyncDelete(RenderProxy* proxy) { if (!proxy) return; if (proxy->mContext) { // Use the common pool because ~RenderProxy blocks on calling into RenderThread CommonPool::post([proxy]() { delete proxy; }); } else { delete proxy; } } RenderProxy::~RenderProxy() { destroyContext(); } Loading
libs/hwui/renderthread/RenderProxy.h +6 −2 Original line number Diff line number Diff line Loading @@ -62,10 +62,14 @@ enum { * references RenderProxy fields. This is safe as RenderProxy cannot * be deleted if it is blocked inside a call. */ class RenderProxy { class RenderProxy final { public: RenderProxy(bool opaque, RenderNode* rootNode, IContextFactory* contextFactory); virtual ~RenderProxy(); ~RenderProxy(); // Schedules a delete of the RenderProxy at a later date. Avoids blocking the current thread // on destruction which ~RenderProxy does by default. static void asyncDelete(RenderProxy*); // Won't take effect until next EGLSurface creation void setSwapBehavior(SwapBehavior swapBehavior); Loading