Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit beee882c authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android (Google) Code Review
Browse files

Merge "Do not hold lock when trying to get snapshot" into qt-dev

parents fcc6df7c 925bb3c9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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. */
+20 −15
Original line number Diff line number Diff line
@@ -4521,6 +4521,14 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        enforceCallerIsRecentsOrHasPermission(READ_FRAME_BUFFER, "getTaskSnapshot()");
        final long ident = Binder.clearCallingIdentity();
        try {
            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,
@@ -4531,10 +4539,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
            }
        }
        // Don't call this while holding the lock as this operation might hit the disk.
            return task.getSnapshot(reducedResolution);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
        return task.getSnapshot(reducedResolution, restoreFromDisk);
    }

    @Override
@@ -7413,10 +7418,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
+3 −2
Original line number Diff line number Diff line
@@ -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() {
+3 −2
Original line number Diff line number Diff line
@@ -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);
    }