Loading core/java/android/window/TaskSnapshotListenerTracker.java +5 −1 Original line number Diff line number Diff line Loading @@ -58,11 +58,15 @@ class TaskSnapshotListenerTracker extends ITaskSnapshotListener.Stub { */ @Override public void onTaskSnapshotChanged(int taskId, TaskSnapshot snapshot) { mManager.createTracker(taskId, snapshot); final ArrayList<TaskSnapshotListener> tempList; synchronized (mLocalListeners) { if (isEmpty()) { snapshot.closeBuffer(); return; } tempList = new ArrayList<>(mLocalListeners); } mManager.createTrackerWithCount(taskId, snapshot, tempList.size()); for (TaskSnapshotListener l : tempList) { l.onTaskSnapshotChanged(taskId, snapshot); } Loading core/java/android/window/TaskSnapshotManager.java +11 −6 Original line number Diff line number Diff line Loading @@ -264,9 +264,9 @@ public class TaskSnapshotManager { } } void createTracker(int taskId, TaskSnapshot snapshot) { void createTrackerWithCount(int taskId, TaskSnapshot snapshot, int initialReferenceCount) { synchronized (sLock) { mGlobalSnapshotTracker.createTracker(taskId, snapshot); mGlobalSnapshotTracker.createTracker(taskId, snapshot, initialReferenceCount); } } Loading Loading @@ -296,13 +296,14 @@ public class TaskSnapshotManager { private static class GlobalSnapshotTracker { final SparseArray<SingleTaskTracker> mSnapshotTrackers = new SparseArray<>(); void createTracker(int taskId, TaskSnapshot snapshot) { void createTracker(int taskId, TaskSnapshot snapshot, int initialReferenceCount) { SingleTaskTracker taskTracker = mSnapshotTrackers.get(taskId); if (taskTracker == null) { taskTracker = new SingleTaskTracker(); mSnapshotTrackers.put(taskId, taskTracker); } final SnapshotTracker tracker = new SnapshotTracker(taskId, snapshot); final SnapshotTracker tracker = new SnapshotTracker(taskId, snapshot, initialReferenceCount); taskTracker.addTracker(tracker); sCleaner.register(snapshot, () -> { synchronized (sLock) { Loading @@ -311,6 +312,10 @@ public class TaskSnapshotManager { }); } void createTracker(int taskId, TaskSnapshot snapshot) { createTracker(taskId, snapshot, 1 /* initialReferenceCount */); } void removeTracker(SnapshotTracker tracker, boolean forceRemove) { if (tracker == null) { return; Loading Loading @@ -443,7 +448,7 @@ public class TaskSnapshotManager { final WeakReference<TaskSnapshot> mSnapshot; int mReferenceCount; SnapshotTracker(int taskId, TaskSnapshot snapshot) { SnapshotTracker(int taskId, TaskSnapshot snapshot, int referenceCount) { super(); mTaskId = taskId; mSnapshotId = snapshot.getId(); Loading @@ -451,7 +456,7 @@ public class TaskSnapshotManager { mIsLowResolution = snapshot.isLowResolution(); snapshot.setSnapshotTracker(this); mSnapshot = new WeakReference<>(snapshot); mReferenceCount = 1; mReferenceCount = referenceCount; } void increaseReference() { mReferenceCount++; Loading packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java +2 −3 Original line number Diff line number Diff line Loading @@ -391,9 +391,8 @@ public class TaskStackChangeListeners { } if (!snapshotConsumed) { thumbnail.recycleBitmap(); if (com.android.window.flags.Flags.reduceTaskSnapshotMemoryUsage()) { snapshot.closeBuffer(); } else if (snapshot.getHardwareBuffer() != null) { if (!com.android.window.flags.Flags.reduceTaskSnapshotMemoryUsage() && snapshot.getHardwareBuffer() != null) { snapshot.getHardwareBuffer().close(); } } Loading Loading
core/java/android/window/TaskSnapshotListenerTracker.java +5 −1 Original line number Diff line number Diff line Loading @@ -58,11 +58,15 @@ class TaskSnapshotListenerTracker extends ITaskSnapshotListener.Stub { */ @Override public void onTaskSnapshotChanged(int taskId, TaskSnapshot snapshot) { mManager.createTracker(taskId, snapshot); final ArrayList<TaskSnapshotListener> tempList; synchronized (mLocalListeners) { if (isEmpty()) { snapshot.closeBuffer(); return; } tempList = new ArrayList<>(mLocalListeners); } mManager.createTrackerWithCount(taskId, snapshot, tempList.size()); for (TaskSnapshotListener l : tempList) { l.onTaskSnapshotChanged(taskId, snapshot); } Loading
core/java/android/window/TaskSnapshotManager.java +11 −6 Original line number Diff line number Diff line Loading @@ -264,9 +264,9 @@ public class TaskSnapshotManager { } } void createTracker(int taskId, TaskSnapshot snapshot) { void createTrackerWithCount(int taskId, TaskSnapshot snapshot, int initialReferenceCount) { synchronized (sLock) { mGlobalSnapshotTracker.createTracker(taskId, snapshot); mGlobalSnapshotTracker.createTracker(taskId, snapshot, initialReferenceCount); } } Loading Loading @@ -296,13 +296,14 @@ public class TaskSnapshotManager { private static class GlobalSnapshotTracker { final SparseArray<SingleTaskTracker> mSnapshotTrackers = new SparseArray<>(); void createTracker(int taskId, TaskSnapshot snapshot) { void createTracker(int taskId, TaskSnapshot snapshot, int initialReferenceCount) { SingleTaskTracker taskTracker = mSnapshotTrackers.get(taskId); if (taskTracker == null) { taskTracker = new SingleTaskTracker(); mSnapshotTrackers.put(taskId, taskTracker); } final SnapshotTracker tracker = new SnapshotTracker(taskId, snapshot); final SnapshotTracker tracker = new SnapshotTracker(taskId, snapshot, initialReferenceCount); taskTracker.addTracker(tracker); sCleaner.register(snapshot, () -> { synchronized (sLock) { Loading @@ -311,6 +312,10 @@ public class TaskSnapshotManager { }); } void createTracker(int taskId, TaskSnapshot snapshot) { createTracker(taskId, snapshot, 1 /* initialReferenceCount */); } void removeTracker(SnapshotTracker tracker, boolean forceRemove) { if (tracker == null) { return; Loading Loading @@ -443,7 +448,7 @@ public class TaskSnapshotManager { final WeakReference<TaskSnapshot> mSnapshot; int mReferenceCount; SnapshotTracker(int taskId, TaskSnapshot snapshot) { SnapshotTracker(int taskId, TaskSnapshot snapshot, int referenceCount) { super(); mTaskId = taskId; mSnapshotId = snapshot.getId(); Loading @@ -451,7 +456,7 @@ public class TaskSnapshotManager { mIsLowResolution = snapshot.isLowResolution(); snapshot.setSnapshotTracker(this); mSnapshot = new WeakReference<>(snapshot); mReferenceCount = 1; mReferenceCount = referenceCount; } void increaseReference() { mReferenceCount++; Loading
packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java +2 −3 Original line number Diff line number Diff line Loading @@ -391,9 +391,8 @@ public class TaskStackChangeListeners { } if (!snapshotConsumed) { thumbnail.recycleBitmap(); if (com.android.window.flags.Flags.reduceTaskSnapshotMemoryUsage()) { snapshot.closeBuffer(); } else if (snapshot.getHardwareBuffer() != null) { if (!com.android.window.flags.Flags.reduceTaskSnapshotMemoryUsage() && snapshot.getHardwareBuffer() != null) { snapshot.getHardwareBuffer().close(); } } Loading