From d449468a34d52a64a6a676f875470b7048b6b778 Mon Sep 17 00:00:00 2001 From: Omar Eissa Date: Wed, 8 Mar 2023 11:55:10 +0000 Subject: [PATCH] Refactor notifyScreenshotListeners method in WMS Refactored notfiyScreenshotListeners method in WindowManagerService to reduce unnecessary iteration over visible activities. Bug: 274128914 Test: atest CtsWindowManagerDeviceTestCases:ActivityCaptureCallbackTests Change-Id: I6ca97dba0dfd4674ab8fc6f2ad0762c7e30c1356 --- .../server/wm/WindowManagerService.java | 44 ++++++------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 98563f6e73fca..103b20e76dce5 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -9528,30 +9528,6 @@ public class WindowManagerService extends IWindowManager.Stub mSurfaceSyncGroupController.markSyncGroupReady(syncGroupToken); } - private ArraySet getVisibleActivityRecords(int displayId) { - ArraySet result = new ArraySet<>(); - synchronized (mGlobalLock) { - ArraySet addedActivities = new ArraySet<>(); - DisplayContent displayContent = mRoot.getDisplayContent(displayId); - if (displayContent != null) { - displayContent.forAllWindows( - (w) -> { - if (w.isVisible() - && w.isDisplayed() - && w.mActivityRecord != null - && !addedActivities.contains( - w.mActivityRecord.mActivityComponent) - && w.mActivityRecord.isVisible() - && w.isVisibleNow()) { - addedActivities.add(w.mActivityRecord.mActivityComponent); - result.add(w.mActivityRecord); - } - }, - true /* traverseTopToBottom */); - } - } - return result; - } /** * Must be called when a screenshot is taken via hardware chord. @@ -9567,14 +9543,20 @@ public class WindowManagerService extends IWindowManager.Stub throw new SecurityException("Requires STATUS_BAR_SERVICE permission"); } synchronized (mGlobalLock) { - ArraySet notifiedApps = new ArraySet<>(); - ArraySet visibleApps = getVisibleActivityRecords(displayId); - for (ActivityRecord ar : visibleApps) { - if (ar.isRegisteredForScreenCaptureCallback()) { - ar.reportScreenCaptured(); - notifiedApps.add(ar.mActivityComponent); - } + final DisplayContent displayContent = mRoot.getDisplayContent(displayId); + if (displayContent == null) { + return new ArrayList<>(); } + ArraySet notifiedApps = new ArraySet<>(); + displayContent.forAllActivities( + (ar) -> { + if (!notifiedApps.contains(ar.mActivityComponent) && ar.isVisible() + && ar.isRegisteredForScreenCaptureCallback()) { + ar.reportScreenCaptured(); + notifiedApps.add(ar.mActivityComponent); + } + }, + true /* traverseTopToBottom */); return List.copyOf(notifiedApps); } }