Loading core/java/android/window/flags/windowing_frontend.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,17 @@ flag { bug: "362938401" } flag { name: "record_task_snapshots_before_shutdown" namespace: "windowing_frontend" description: "Record task snapshots before shutdown" bug: "376821232" is_fixed_read_only: true metadata { purpose: PURPOSE_BUGFIX } } flag { name: "predictive_back_three_button_nav" namespace: "systemui" Loading services/core/java/com/android/server/wm/RootWindowContainer.java +4 −1 Original line number Diff line number Diff line Loading @@ -2856,7 +2856,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent> void prepareForShutdown() { for (int i = 0; i < getChildCount(); i++) { createSleepToken("shutdown", getChildAt(i).mDisplayId); final int displayId = getChildAt(i).mDisplayId; mWindowManager.mSnapshotController.mTaskSnapshotController .snapshotForShutdown(displayId); createSleepToken("shutdown", displayId); } } Loading services/core/java/com/android/server/wm/SnapshotPersistQueue.java +14 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ class SnapshotPersistQueue { private boolean mStarted; private final Object mLock = new Object(); private final UserManagerInternal mUserManagerInternal; private boolean mShutdown; SnapshotPersistQueue() { mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); Loading Loading @@ -101,6 +102,16 @@ class SnapshotPersistQueue { } } /** * Write out everything in the queue because of shutdown. */ void shutdown() { synchronized (mLock) { mShutdown = true; mLock.notifyAll(); } } @VisibleForTesting void waitForQueueEmpty() { while (true) { Loading Loading @@ -193,8 +204,10 @@ class SnapshotPersistQueue { if (isReadyToWrite) { next.write(); } if (!mShutdown) { SystemClock.sleep(DELAY_MS); } } synchronized (mLock) { final boolean writeQueueEmpty = mWriteQueue.isEmpty(); if (!writeQueueEmpty && !mPaused) { Loading services/core/java/com/android/server/wm/TaskSnapshotController.java +22 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,28 @@ class TaskSnapshotController extends AbsAppSnapshotController<Task, TaskSnapshot mPersister.removeObsoleteFiles(persistentTaskIds, runningUserIds); } /** * Record task snapshots before shutdown. */ void snapshotForShutdown(int displayId) { if (!com.android.window.flags.Flags.recordTaskSnapshotsBeforeShutdown()) { return; } final DisplayContent displayContent = mService.mRoot.getDisplayContent(displayId); if (displayContent == null) { return; } displayContent.forAllLeafTasks(task -> { if (task.isVisible() && !task.isActivityTypeHome()) { final TaskSnapshot snapshot = captureSnapshot(task); if (snapshot != null) { mPersister.persistSnapshot(task.mTaskId, task.mUserId, snapshot); } } }, true /* traverseTopToBottom */); mPersister.mSnapshotPersistQueue.shutdown(); } /** * Called when screen is being turned off. */ Loading Loading
core/java/android/window/flags/windowing_frontend.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,17 @@ flag { bug: "362938401" } flag { name: "record_task_snapshots_before_shutdown" namespace: "windowing_frontend" description: "Record task snapshots before shutdown" bug: "376821232" is_fixed_read_only: true metadata { purpose: PURPOSE_BUGFIX } } flag { name: "predictive_back_three_button_nav" namespace: "systemui" Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +4 −1 Original line number Diff line number Diff line Loading @@ -2856,7 +2856,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent> void prepareForShutdown() { for (int i = 0; i < getChildCount(); i++) { createSleepToken("shutdown", getChildAt(i).mDisplayId); final int displayId = getChildAt(i).mDisplayId; mWindowManager.mSnapshotController.mTaskSnapshotController .snapshotForShutdown(displayId); createSleepToken("shutdown", displayId); } } Loading
services/core/java/com/android/server/wm/SnapshotPersistQueue.java +14 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ class SnapshotPersistQueue { private boolean mStarted; private final Object mLock = new Object(); private final UserManagerInternal mUserManagerInternal; private boolean mShutdown; SnapshotPersistQueue() { mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); Loading Loading @@ -101,6 +102,16 @@ class SnapshotPersistQueue { } } /** * Write out everything in the queue because of shutdown. */ void shutdown() { synchronized (mLock) { mShutdown = true; mLock.notifyAll(); } } @VisibleForTesting void waitForQueueEmpty() { while (true) { Loading Loading @@ -193,8 +204,10 @@ class SnapshotPersistQueue { if (isReadyToWrite) { next.write(); } if (!mShutdown) { SystemClock.sleep(DELAY_MS); } } synchronized (mLock) { final boolean writeQueueEmpty = mWriteQueue.isEmpty(); if (!writeQueueEmpty && !mPaused) { Loading
services/core/java/com/android/server/wm/TaskSnapshotController.java +22 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,28 @@ class TaskSnapshotController extends AbsAppSnapshotController<Task, TaskSnapshot mPersister.removeObsoleteFiles(persistentTaskIds, runningUserIds); } /** * Record task snapshots before shutdown. */ void snapshotForShutdown(int displayId) { if (!com.android.window.flags.Flags.recordTaskSnapshotsBeforeShutdown()) { return; } final DisplayContent displayContent = mService.mRoot.getDisplayContent(displayId); if (displayContent == null) { return; } displayContent.forAllLeafTasks(task -> { if (task.isVisible() && !task.isActivityTypeHome()) { final TaskSnapshot snapshot = captureSnapshot(task); if (snapshot != null) { mPersister.persistSnapshot(task.mTaskId, task.mUserId, snapshot); } } }, true /* traverseTopToBottom */); mPersister.mSnapshotPersistQueue.shutdown(); } /** * Called when screen is being turned off. */ Loading