summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
author Marin Shalamanov <shalamanov@google.com> 2020-09-09 15:01:47 +0200
committer Marin Shalamanov <shalamanov@google.com> 2020-09-10 22:10:18 +0200
commit23c31af2f8097f14dfc4a71dad3553d84a10c35f (patch)
tree46085f9a2b4b8bf793daa9f13cfaa9657731a614 /services/surfaceflinger/SurfaceFlinger.cpp
parent8436cbdf4e7b9cdc4f687ce51cd82f4602f68420 (diff)
SF: Clean framebuffer cache on hotplug
This CL cleans the framebuffer cache when a hotplug event for already connected display is processed. This way when we destruct the DisplayDevice the framebuffers will be completely deallocated, so they can later be reallocated. Test: 1. unplug HDMI 2. adb shell dumpsys SurfaceFlinger | grep FramebufferSurface verify only 3 framebuffers are allocated 3. plug HDMI 5. adb shell dumpsys SurfaceFlinger | grep FramebufferSurface verify only 3 framebuffers are allocated Test: Using dev SurfaceFlinger backdoor (1036) which injects hotplug: adb shell service call SurfaceFlinger 1036 && \ adb shell dumpsys SurfaceFlinger | grep FramebufferSurface Bug: 160112047 Bug: 167670568 Change-Id: I96282bec439ebf413dcd5d57f6b884eccef19c5f
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 6478497b8f..9d35a3fca6 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2684,6 +2684,7 @@ void SurfaceFlinger::processDisplayChanged(const wp<IBinder>& displayToken,
const sp<IBinder> drawingBinder = IInterface::asBinder(drawingState.surface);
if (currentBinder != drawingBinder || currentState.sequenceId != drawingState.sequenceId) {
// changing the surface is like destroying and recreating the DisplayDevice
+ getRenderEngine().cleanFramebufferCache();
if (const auto display = getDisplayDeviceLocked(displayToken)) {
display->disconnect();
}