diff options
Diffstat (limited to 'libs/hwui/renderthread')
-rw-r--r-- | libs/hwui/renderthread/CacheManager.h | 2 | ||||
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 3 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.cpp | 9 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.h | 1 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderThread.cpp | 5 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderThread.h | 4 | ||||
-rw-r--r-- | libs/hwui/renderthread/VulkanManager.h | 1 |
7 files changed, 20 insertions, 5 deletions
diff --git a/libs/hwui/renderthread/CacheManager.h b/libs/hwui/renderthread/CacheManager.h index 35fc91a42510..66f04f1ba266 100644 --- a/libs/hwui/renderthread/CacheManager.h +++ b/libs/hwui/renderthread/CacheManager.h @@ -59,7 +59,7 @@ public: private: friend class RenderThread; - CacheManager(const DisplayInfo& display); + explicit CacheManager(const DisplayInfo& display); void reset(sk_sp<GrContext> grContext); void destroy(); diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 4e4262c5c0a7..8e57a3a119e3 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -576,8 +576,7 @@ void CanvasContext::trimMemory(RenderThread& thread, int level) { ATRACE_CALL(); if (level >= TRIM_MEMORY_COMPLETE) { thread.cacheManager().trimMemory(CacheManager::TrimMemoryMode::Complete); - thread.destroyGlContext(); - thread.vulkanManager().destroy(); + thread.destroyRenderingContext(); } else if (level >= TRIM_MEMORY_UI_HIDDEN) { thread.cacheManager().trimMemory(CacheManager::TrimMemoryMode::UiHidden); } diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 085812a00f71..aa6af23d8ed3 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -30,6 +30,7 @@ #include "renderthread/RenderThread.h" #include "utils/Macros.h" #include "utils/TimeUtils.h" +#include "WebViewFunctorManager.h" #include <ui/GraphicBuffer.h> @@ -143,6 +144,14 @@ void RenderProxy::invokeFunctor(Functor* functor, bool waitForCompletion) { } } +void RenderProxy::destroyFunctor(int functor) { + ATRACE_CALL(); + RenderThread& thread = RenderThread::getInstance(); + thread.queue().post([=]() { + WebViewFunctorManager::instance().destroyFunctor(functor); + }); +} + DeferredLayerUpdater* RenderProxy::createTextureLayer() { return mRenderThread.queue().runSync([this]() -> auto { return mContext->createTextureLayer(); diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h index d9b789f28f8d..9dc918121be6 100644 --- a/libs/hwui/renderthread/RenderProxy.h +++ b/libs/hwui/renderthread/RenderProxy.h @@ -82,6 +82,7 @@ public: ANDROID_API void destroy(); ANDROID_API static void invokeFunctor(Functor* functor, bool waitForCompletion); + static void destroyFunctor(int functor); ANDROID_API DeferredLayerUpdater* createTextureLayer(); ANDROID_API void buildLayer(RenderNode* node); diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 207673c1c8dd..c06faddf7fa6 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -132,6 +132,7 @@ RenderThread::RenderThread() , mFrameCallbackTaskPending(false) , mRenderState(nullptr) , mEglManager(nullptr) + , mFunctorManager(WebViewFunctorManager::instance()) , mVkManager(nullptr) { Properties::load(); start("RenderThread"); @@ -197,11 +198,13 @@ void RenderThread::requireGlContext() { setGrContext(grContext); } -void RenderThread::destroyGlContext() { +void RenderThread::destroyRenderingContext() { + mFunctorManager.onContextDestroyed(); if (mEglManager->hasEglContext()) { setGrContext(nullptr); mEglManager->destroy(); } + vulkanManager().destroy(); } void RenderThread::dumpGraphicsMemory(int fd) { diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h index 2384f9541ec0..12666b323d11 100644 --- a/libs/hwui/renderthread/RenderThread.h +++ b/libs/hwui/renderthread/RenderThread.h @@ -23,6 +23,7 @@ #include "CacheManager.h" #include "TimeLord.h" #include "thread/ThreadBase.h" +#include "WebViewFunctorManager.h" #include <GrContext.h> #include <SkBitmap.h> @@ -104,7 +105,7 @@ public: void dumpGraphicsMemory(int fd); void requireGlContext(); - void destroyGlContext(); + void destroyRenderingContext(); /** * isCurrent provides a way to query, if the caller is running on @@ -151,6 +152,7 @@ private: TimeLord mTimeLord; RenderState* mRenderState; EglManager* mEglManager; + WebViewFunctorManager& mFunctorManager; ProfileDataContainer mGlobalProfileData; Readback* mReadback = nullptr; diff --git a/libs/hwui/renderthread/VulkanManager.h b/libs/hwui/renderthread/VulkanManager.h index 69ca23acb1fd..9eb942c9d6ee 100644 --- a/libs/hwui/renderthread/VulkanManager.h +++ b/libs/hwui/renderthread/VulkanManager.h @@ -160,6 +160,7 @@ private: fPtr = ptr; return *this; } + // NOLINTNEXTLINE(google-explicit-constructor) operator FNPTR_TYPE() const { return fPtr; } private: |