diff --git a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java index 770931179c5e9..593478c65a1c6 100644 --- a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java +++ b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java @@ -98,7 +98,7 @@ public final class ContentSuggestionsPerUserService extends RemoteContentSuggestionsService service = getRemoteServiceLocked(); if (service != null) { ActivityManager.TaskSnapshot snapshot = - mActivityTaskManagerInternal.getTaskSnapshot(taskId, false); + mActivityTaskManagerInternal.getTaskSnapshotNoRestore(taskId, false); GraphicBuffer snapshotBuffer = null; int colorSpaceId = 0; if (snapshot != null) { diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index dbc530d38684d..ab35652eb5257 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -559,7 +559,7 @@ public abstract class ActivityTaskManagerInternal { /** * Gets bitmap snapshot of the provided task id. */ - public abstract ActivityManager.TaskSnapshot getTaskSnapshot(int taskId, + public abstract ActivityManager.TaskSnapshot getTaskSnapshotNoRestore(int taskId, boolean reducedResolution); /** Returns true if uid is considered foreground for activity start purposes. */ diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 8ba7ca1abba0d..9fc278e5639d5 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4521,22 +4521,27 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { enforceCallerIsRecentsOrHasPermission(READ_FRAME_BUFFER, "getTaskSnapshot()"); final long ident = Binder.clearCallingIdentity(); try { - final TaskRecord task; - synchronized (mGlobalLock) { - task = mRootActivityContainer.anyTaskForId(taskId, - MATCH_TASK_IN_STACKS_OR_RECENT_TASKS); - if (task == null) { - Slog.w(TAG, "getTaskSnapshot: taskId=" + taskId + " not found"); - return null; - } - } - // Don't call this while holding the lock as this operation might hit the disk. - return task.getSnapshot(reducedResolution); + return getTaskSnapshot(taskId, reducedResolution, true /* restoreFromDisk */); } finally { Binder.restoreCallingIdentity(ident); } } + private ActivityManager.TaskSnapshot getTaskSnapshot(int taskId, boolean reducedResolution, + boolean restoreFromDisk) { + final TaskRecord task; + synchronized (mGlobalLock) { + task = mRootActivityContainer.anyTaskForId(taskId, + MATCH_TASK_IN_STACKS_OR_RECENT_TASKS); + if (task == null) { + Slog.w(TAG, "getTaskSnapshot: taskId=" + taskId + " not found"); + return null; + } + } + // Don't call this while holding the lock as this operation might hit the disk. + return task.getSnapshot(reducedResolution, restoreFromDisk); + } + @Override public void setDisablePreviewScreenshots(IBinder token, boolean disable) { synchronized (mGlobalLock) { @@ -7419,10 +7424,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } @Override - public ActivityManager.TaskSnapshot getTaskSnapshot(int taskId, boolean reducedResolution) { - synchronized (mGlobalLock) { - return ActivityTaskManagerService.this.getTaskSnapshot(taskId, reducedResolution); - } + public ActivityManager.TaskSnapshot getTaskSnapshotNoRestore(int taskId, + boolean reducedResolution) { + return ActivityTaskManagerService.this.getTaskSnapshot(taskId, reducedResolution, + false /* restoreFromDisk */); } @Override diff --git a/services/core/java/com/android/server/wm/TaskRecord.java b/services/core/java/com/android/server/wm/TaskRecord.java index 298b302a17fbf..3fd4e83b94944 100644 --- a/services/core/java/com/android/server/wm/TaskRecord.java +++ b/services/core/java/com/android/server/wm/TaskRecord.java @@ -851,11 +851,12 @@ class TaskRecord extends ConfigurationContainer { /** * DO NOT HOLD THE ACTIVITY MANAGER LOCK WHEN CALLING THIS METHOD! */ - TaskSnapshot getSnapshot(boolean reducedResolution) { + TaskSnapshot getSnapshot(boolean reducedResolution, boolean restoreFromDisk) { // TODO: Move this to {@link TaskWindowContainerController} once recent tasks are more // synchronized between AM and WM. - return mService.mWindowManager.getTaskSnapshot(taskId, userId, reducedResolution); + return mService.mWindowManager.getTaskSnapshot(taskId, userId, reducedResolution, + restoreFromDisk); } void touchActiveTime() { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 0a2fc9b366a30..45c7e693b07cc 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3551,8 +3551,9 @@ public class WindowManagerService extends IWindowManager.Stub return true; } - public TaskSnapshot getTaskSnapshot(int taskId, int userId, boolean reducedResolution) { - return mTaskSnapshotController.getSnapshot(taskId, userId, true /* restoreFromDisk */, + public TaskSnapshot getTaskSnapshot(int taskId, int userId, boolean reducedResolution, + boolean restoreFromDisk) { + return mTaskSnapshotController.getSnapshot(taskId, userId, restoreFromDisk, reducedResolution); }