Revert "Delete RenderProxy off of the cleaner thread"
This reverts commit da3559683482a61d93b06bed6f46349f6f01dc63.
Bug: b/192050906
If too many RenderProxies are destroyed too quickly, we can end up jamming up the CommonPool preventing RenderThread from making progress if it's waiting on CommonPool tasks.
Change-Id: I8c324bc60891440d9b7be67961f8d5f881dc0f03
diff --git a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp
index 2c44020..9ff2f46 100644
--- a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp
+++ b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp
@@ -247,7 +247,7 @@
static void android_view_ThreadedRenderer_deleteProxy(JNIEnv* env, jobject clazz,
jlong proxyPtr) {
RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
- RenderProxy::asyncDelete(proxy);
+ delete proxy;
}
static jboolean android_view_ThreadedRenderer_loadSystemProperties(JNIEnv* env, jobject clazz,
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 8291fa7..c47050c 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -26,7 +26,6 @@
#include "renderthread/CanvasContext.h"
#include "renderthread/RenderTask.h"
#include "renderthread/RenderThread.h"
-#include "thread/CommonPool.h"
#include "utils/Macros.h"
#include "utils/TimeUtils.h"
@@ -43,17 +42,6 @@
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();
}
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
index f4bcd07..d575aa7 100644
--- a/libs/hwui/renderthread/RenderProxy.h
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -62,14 +62,10 @@
* references RenderProxy fields. This is safe as RenderProxy cannot
* be deleted if it is blocked inside a call.
*/
-class RenderProxy final {
+class RenderProxy {
public:
RenderProxy(bool opaque, RenderNode* rootNode, IContextFactory* contextFactory);
- ~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*);
+ virtual ~RenderProxy();
// Won't take effect until next EGLSurface creation
void setSwapBehavior(SwapBehavior swapBehavior);