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

Commit 925bb3c9 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Do not hold lock when trying to get snapshot

Also never hit the disk for content suggestions, that doesn't
make any sense.

Test: Trace
Fixes: 134482630
Change-Id: Ie79da77152782973e1188e854fd6ebb3ca1df9cc
parent 94b29818
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -98,7 +98,7 @@ public final class ContentSuggestionsPerUserService extends
        RemoteContentSuggestionsService service = getRemoteServiceLocked();
        RemoteContentSuggestionsService service = getRemoteServiceLocked();
        if (service != null) {
        if (service != null) {
            ActivityManager.TaskSnapshot snapshot =
            ActivityManager.TaskSnapshot snapshot =
                    mActivityTaskManagerInternal.getTaskSnapshot(taskId, false);
                    mActivityTaskManagerInternal.getTaskSnapshotNoRestore(taskId, false);
            GraphicBuffer snapshotBuffer = null;
            GraphicBuffer snapshotBuffer = null;
            int colorSpaceId = 0;
            int colorSpaceId = 0;
            if (snapshot != null) {
            if (snapshot != null) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -553,7 +553,7 @@ public abstract class ActivityTaskManagerInternal {
    /**
    /**
     * Gets bitmap snapshot of the provided task id.
     * Gets bitmap snapshot of the provided task id.
     */
     */
    public abstract ActivityManager.TaskSnapshot getTaskSnapshot(int taskId,
    public abstract ActivityManager.TaskSnapshot getTaskSnapshotNoRestore(int taskId,
            boolean reducedResolution);
            boolean reducedResolution);


    /** Returns true if uid is considered foreground for activity start purposes. */
    /** Returns true if uid is considered foreground for activity start purposes. */
+20 −15
Original line number Original line Diff line number Diff line
@@ -4507,6 +4507,14 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        enforceCallerIsRecentsOrHasPermission(READ_FRAME_BUFFER, "getTaskSnapshot()");
        enforceCallerIsRecentsOrHasPermission(READ_FRAME_BUFFER, "getTaskSnapshot()");
        final long ident = Binder.clearCallingIdentity();
        final long ident = Binder.clearCallingIdentity();
        try {
        try {
            return getTaskSnapshot(taskId, reducedResolution, true /* restoreFromDisk */);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    private ActivityManager.TaskSnapshot getTaskSnapshot(int taskId, boolean reducedResolution,
            boolean restoreFromDisk) {
        final TaskRecord task;
        final TaskRecord task;
        synchronized (mGlobalLock) {
        synchronized (mGlobalLock) {
            task = mRootActivityContainer.anyTaskForId(taskId,
            task = mRootActivityContainer.anyTaskForId(taskId,
@@ -4517,10 +4525,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
            }
            }
        }
        }
        // Don't call this while holding the lock as this operation might hit the disk.
        // Don't call this while holding the lock as this operation might hit the disk.
            return task.getSnapshot(reducedResolution);
        return task.getSnapshot(reducedResolution, restoreFromDisk);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }
    }


    @Override
    @Override
@@ -7399,10 +7404,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        }
        }


        @Override
        @Override
        public ActivityManager.TaskSnapshot getTaskSnapshot(int taskId, boolean reducedResolution) {
        public ActivityManager.TaskSnapshot getTaskSnapshotNoRestore(int taskId,
            synchronized (mGlobalLock) {
                boolean reducedResolution) {
                return ActivityTaskManagerService.this.getTaskSnapshot(taskId, reducedResolution);
            return ActivityTaskManagerService.this.getTaskSnapshot(taskId, reducedResolution,
            }
                    false /* restoreFromDisk */);
        }
        }


        @Override
        @Override
+3 −2
Original line number Original line Diff line number Diff line
@@ -851,11 +851,12 @@ class TaskRecord extends ConfigurationContainer {
    /**
    /**
     * DO NOT HOLD THE ACTIVITY MANAGER LOCK WHEN CALLING THIS METHOD!
     * 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
        // TODO: Move this to {@link TaskWindowContainerController} once recent tasks are more
        // synchronized between AM and WM.
        // synchronized between AM and WM.
        return mService.mWindowManager.getTaskSnapshot(taskId, userId, reducedResolution);
        return mService.mWindowManager.getTaskSnapshot(taskId, userId, reducedResolution,
                restoreFromDisk);
    }
    }


    void touchActiveTime() {
    void touchActiveTime() {
+3 −2
Original line number Original line Diff line number Diff line
@@ -3549,8 +3549,9 @@ public class WindowManagerService extends IWindowManager.Stub
        return true;
        return true;
    }
    }


    public TaskSnapshot getTaskSnapshot(int taskId, int userId, boolean reducedResolution) {
    public TaskSnapshot getTaskSnapshot(int taskId, int userId, boolean reducedResolution,
        return mTaskSnapshotController.getSnapshot(taskId, userId, true /* restoreFromDisk */,
            boolean restoreFromDisk) {
        return mTaskSnapshotController.getSnapshot(taskId, userId, restoreFromDisk,
                reducedResolution);
                reducedResolution);
    }
    }