OSDN Git Service

Initial implementation of snapshots
authorJorim Jaggi <jjaggi@google.com>
Tue, 6 Dec 2016 17:10:06 +0000 (09:10 -0800)
committerJorim Jaggi <jjaggi@google.com>
Thu, 12 Jan 2017 15:28:01 +0000 (16:28 +0100)
commit02886a82d876aa5e31a92444fec70208599c509c
tree7a457a81fa28dcc5795eb60486aa8b20ef62ba74
parente86e6d75959787389fcc9b51082b0f33c4553fcd
Initial implementation of snapshots

All this functionality is hidden behind a flag. If this flag is
active, we disable the regular screenshots.

Instead, we take a screenshot when an app transition for which a
task is disappearing is starting. The screenshot gets stored
into a gralloc buffer. SystemUI uses a new method to retrieve
a snapshot gralloc buffer and then draws it using GraphicBuffer.
createHardwareBitmap().

When starting an existing activity in an existing tasks, or when
bringing an existing tasks to front from recents, we add a new
snapshot starting window. For that, we reuse the existing
starting window, but when creating the window, we use a fake
window that draws the contents of the starting window.

Test: runtest frameworks-services -c
com.android.server.wm.TaskSnapshotControllerTest
Bug: 31339431
Change-Id: If72df07b3e56f30413db5029d0887b8c9665aaf4
30 files changed:
core/java/android/app/ActivityManager.java
core/java/android/app/IActivityManager.aidl
core/java/android/view/WindowManager.java
core/java/android/view/WindowManagerPolicy.java
packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
services/core/java/com/android/server/am/ActivityManagerService.java
services/core/java/com/android/server/am/ActivityRecord.java
services/core/java/com/android/server/am/ActivityStack.java
services/core/java/com/android/server/am/ActivityStarter.java
services/core/java/com/android/server/am/TaskRecord.java
services/core/java/com/android/server/policy/PhoneWindowManager.java
services/core/java/com/android/server/policy/SplashScreenSurface.java
services/core/java/com/android/server/wm/AppWindowContainerController.java
services/core/java/com/android/server/wm/AppWindowToken.java
services/core/java/com/android/server/wm/DisplayContent.java
services/core/java/com/android/server/wm/SnapshotStartingData.java [new file with mode: 0644]
services/core/java/com/android/server/wm/SplashScreenStartingData.java [new file with mode: 0644]
services/core/java/com/android/server/wm/StartingData.java
services/core/java/com/android/server/wm/TaskSnapshotCache.java [new file with mode: 0644]
services/core/java/com/android/server/wm/TaskSnapshotController.java [new file with mode: 0644]
services/core/java/com/android/server/wm/TaskSnapshotSurface.java [new file with mode: 0644]
services/core/java/com/android/server/wm/TaskWindowContainerController.java
services/core/java/com/android/server/wm/WindowManagerService.java
services/core/java/com/android/server/wm/WindowState.java
services/core/java/com/android/server/wm/WindowSurfacePlacer.java
services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java [new file with mode: 0644]
services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java
tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java