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

Commit b9d3bc31 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Initialize reference count for SnapshotTracker" into main

parents aaf474ae 5da6bcae
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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);
        }
+11 −6
Original line number Diff line number Diff line
@@ -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);
        }
    }

@@ -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) {
@@ -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;
@@ -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();
@@ -451,7 +456,7 @@ public class TaskSnapshotManager {
            mIsLowResolution = snapshot.isLowResolution();
            snapshot.setSnapshotTracker(this);
            mSnapshot = new WeakReference<>(snapshot);
            mReferenceCount = 1;
            mReferenceCount = referenceCount;
        }
        void increaseReference() {
            mReferenceCount++;
+2 −3
Original line number Diff line number Diff line
@@ -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();
                            }
                        }