diff options
5 files changed, 28 insertions, 21 deletions
diff --git a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java index 770931179c5e..593478c65a1c 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 ed56501f4351..5459edeb3d8b 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -553,7 +553,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 772e5e646825..f661ac0d4800 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4507,22 +4507,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) { @@ -7399,10 +7404,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 298b302a17fb..3fd4e83b9494 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 47df83923700..8876ccbdd33d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3549,8 +3549,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); } |