Implement SkiaGLRenderEngine::cleanFramebufferCache
On hotplug SF calls cleanFramebufferCache in order to
clean the existing handles to framebuffers. This CL
implements the function for SkiaGLRenderEngine and
fixes a bug where after each hotplug we end up with
+3 framebuffers.
Fixes: 182578852
Test: manually flash build, hotplug and call
adb shell dumpsys SurfaceFlinger | grep Framebuffer
to verify that only 3 framebuffers are present
Change-Id: I2a0d1ab6005e3c7a994f8c8c0eeec79afc96d109
diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.cpp b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
index cbb02a3..acd3dcf 100644
--- a/libs/renderengine/skia/SkiaGLRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
@@ -293,11 +293,9 @@
}
SkiaGLRenderEngine::~SkiaGLRenderEngine() {
- std::lock_guard<std::mutex> lock(mRenderingMutex);
- mRuntimeEffects.clear();
- mProtectedTextureCache.clear();
- mTextureCache.clear();
+ cleanFramebufferCache();
+ std::lock_guard<std::mutex> lock(mRenderingMutex);
if (mBlurFilter) {
delete mBlurFilter;
}
@@ -1130,7 +1128,14 @@
return eglCreatePbufferSurface(display, placeholderConfig, attributes.data());
}
-void SkiaGLRenderEngine::cleanFramebufferCache() {}
+void SkiaGLRenderEngine::cleanFramebufferCache() {
+ // TODO(b/180767535) Remove this method and use b/180767535 instead, which would allow
+ // SF to control texture lifecycle more tightly rather than through custom hooks into RE.
+ std::lock_guard<std::mutex> lock(mRenderingMutex);
+ mRuntimeEffects.clear();
+ mProtectedTextureCache.clear();
+ mTextureCache.clear();
+}
int SkiaGLRenderEngine::getContextPriority() {
int value;