From 51ae378da337f34d6021ca7b89565c36204fa2a0 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Mon, 11 Apr 2022 11:21:33 -0700 Subject: [PATCH] ActivityRecordInputSink: Ensure timely release of SurfaceControl Relying on the garbage collector to release SurfaceControl and trigger destruction of server-side layers has proven to be unreliable in monkey testing. In this case it may cause the accumulation of a large number of InputWindowInfo, leading to oneway binder spam. Bug: 228810413 Test: Existing tests pass Change-Id: If961767a1209674f202518f8b8be8f930d1a43e3 --- .../core/java/com/android/server/wm/ActivityRecord.java | 2 ++ .../com/android/server/wm/ActivityRecordInputSink.java | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 2be9b34054d33..314864e2f917f 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -3967,6 +3967,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } else { onRemovedFromDisplay(); } + mActivityRecordInputSink.releaseSurfaceControl(); + super.removeImmediately(); } diff --git a/services/core/java/com/android/server/wm/ActivityRecordInputSink.java b/services/core/java/com/android/server/wm/ActivityRecordInputSink.java index ce49a8675890c..23a832496cc9c 100644 --- a/services/core/java/com/android/server/wm/ActivityRecordInputSink.java +++ b/services/core/java/com/android/server/wm/ActivityRecordInputSink.java @@ -99,4 +99,11 @@ class ActivityRecordInputSink { return inputWindowHandle; } + void releaseSurfaceControl() { + if (mSurfaceControl != null) { + mSurfaceControl.release(); + mSurfaceControl = null; + } + } + }