1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.wm; 18 19 import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; 20 21 import static junit.framework.Assert.assertEquals; 22 23 import static org.junit.Assert.assertNotNull; 24 import static org.junit.Assert.assertNull; 25 26 import android.platform.test.annotations.Presubmit; 27 import android.window.TaskSnapshot; 28 29 import androidx.test.filters.SmallTest; 30 31 import org.junit.Before; 32 import org.junit.Test; 33 import org.junit.runner.RunWith; 34 import org.mockito.Mock; 35 import org.mockito.MockitoAnnotations; 36 37 /** 38 * Test class for {@link TaskSnapshotCache}. 39 * 40 * Build/Install/Run: 41 * atest WmTests:TaskSnapshotCacheTest 42 */ 43 @SmallTest 44 @Presubmit 45 @RunWith(WindowTestRunner.class) 46 public class TaskSnapshotCacheTest extends TaskSnapshotPersisterTestBase { 47 48 private TaskSnapshotCache mCache; 49 @Mock 50 TaskSnapshot mSnapshot; 51 TaskSnapshotCacheTest()52 public TaskSnapshotCacheTest() { 53 super(0.8f, 0.5f); 54 } 55 56 @Override 57 @Before setUp()58 public void setUp() { 59 super.setUp(); 60 MockitoAnnotations.initMocks(this); 61 mCache = new TaskSnapshotCache(mWm, mLoader); 62 } 63 64 @Test testAppRemoved()65 public void testAppRemoved() { 66 final WindowState window = createWindow(null, FIRST_APPLICATION_WINDOW, "window"); 67 mCache.putSnapshot(window.getTask(), createSnapshot()); 68 assertNotNull(mCache.getSnapshot(window.getTask().mTaskId, 0 /* userId */, 69 false /* restoreFromDisk */, false /* isLowResolution */)); 70 mCache.onAppRemoved(window.mActivityRecord); 71 assertNull(mCache.getSnapshot(window.getTask().mTaskId, 0 /* userId */, 72 false /* restoreFromDisk */, false /* isLowResolution */)); 73 } 74 75 @Test testAppDied()76 public void testAppDied() { 77 final WindowState window = createWindow(null, FIRST_APPLICATION_WINDOW, "window"); 78 mCache.putSnapshot(window.getTask(), createSnapshot()); 79 assertNotNull(mCache.getSnapshot(window.getTask().mTaskId, 0 /* userId */, 80 false /* restoreFromDisk */, false /* isLowResolution */)); 81 mCache.onAppDied(window.mActivityRecord); 82 assertNull(mCache.getSnapshot(window.getTask().mTaskId, 0 /* userId */, 83 false /* restoreFromDisk */, false /* isLowResolution */)); 84 } 85 86 @Test testTaskRemoved()87 public void testTaskRemoved() { 88 final WindowState window = createWindow(null, FIRST_APPLICATION_WINDOW, "window"); 89 mCache.putSnapshot(window.getTask(), createSnapshot()); 90 assertNotNull(mCache.getSnapshot(window.getTask().mTaskId, 0 /* userId */, 91 false /* restoreFromDisk */, false /* isLowResolution */)); 92 mCache.onIdRemoved(window.getTask().mTaskId); 93 assertNull(mCache.getSnapshot(window.getTask().mTaskId, 0 /* userId */, 94 false /* restoreFromDisk */, false /* isLowResolution */)); 95 } 96 97 @Test testReduced_notCached()98 public void testReduced_notCached() { 99 final WindowState window = createWindow(null, FIRST_APPLICATION_WINDOW, "window"); 100 mPersister.persistSnapshot(window.getTask().mTaskId, mWm.mCurrentUserId, createSnapshot()); 101 mSnapshotPersistQueue.waitForQueueEmpty(); 102 assertNull(mCache.getSnapshot(window.getTask().mTaskId, mWm.mCurrentUserId, 103 false /* restoreFromDisk */, false /* isLowResolution */)); 104 105 // Load it from disk 106 assertNotNull(mCache.getSnapshot(window.getTask().mTaskId, mWm.mCurrentUserId, 107 true /* restoreFromDisk */, true /* isLowResolution */)); 108 109 // Make sure it's not in the cache now. 110 assertNull(mCache.getSnapshot(window.getTask().mTaskId, mWm.mCurrentUserId, 111 false /* restoreFromDisk */, false /* isLowResolution */)); 112 } 113 114 @Test testRestoreFromDisk()115 public void testRestoreFromDisk() { 116 final WindowState window = createWindow(null, FIRST_APPLICATION_WINDOW, "window"); 117 mPersister.persistSnapshot(window.getTask().mTaskId, mWm.mCurrentUserId, createSnapshot()); 118 mSnapshotPersistQueue.waitForQueueEmpty(); 119 assertNull(mCache.getSnapshot(window.getTask().mTaskId, mWm.mCurrentUserId, 120 false /* restoreFromDisk */, false /* isLowResolution */)); 121 122 // Load it from disk 123 assertNotNull(mCache.getSnapshot(window.getTask().mTaskId, mWm.mCurrentUserId, 124 true /* restoreFromDisk */, false /* isLowResolution */)); 125 } 126 127 @Test testClearCache()128 public void testClearCache() { 129 final WindowState window = createWindow(null, FIRST_APPLICATION_WINDOW, "window"); 130 mCache.putSnapshot(window.getTask(), mSnapshot); 131 assertEquals(mSnapshot, mCache.getSnapshot(window.getTask().mTaskId, 0, false, false)); 132 mCache.clearRunningCache(); 133 assertNull(mCache.getSnapshot(window.getTask().mTaskId, 0, false, false)); 134 } 135 } 136