From 9c1d6b45920a402d35f18057151e78cad1ccf0b4 Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Thu, 9 Feb 2023 14:41:37 +0100 Subject: [PATCH] Release WallpaperService SurfaceControl directly The SurfaceControl is created with the engine and filled in later after the first time attachging. It can be released as soon as the engine is detached, since wallpaper engines are never reused after detaching. Test: atest WallpaperManagerTest # after which, check dumpsys surfaceflinger for leftover offscreen wallpaper layers Test: adb shell su root kill -10 `adb shell pidof system_server` # and then take a heap dump to ensure the IWindow is also gone. Bug: 261358202 Change-Id: I86f0a3ee9b8272d61bbc8f9c5f80ee3f0ddac96f --- core/java/android/service/wallpaper/WallpaperService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 12cd5236017c7..f53abce1d1eaf 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -2198,6 +2198,11 @@ public abstract class WallpaperService extends Service { } mCreated = false; } + + if (mSurfaceControl != null) { + mSurfaceControl.release(); + mSurfaceControl = null; + } } private final DisplayListener mDisplayListener = new DisplayListener() {