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

Commit 47a455af authored by Jayant Chowdhary's avatar Jayant Chowdhary
Browse files

camera2: Remove partial result nodes for error frames.



When there's an capture error reported for a frame, remove its nodes in
mPartialResults map node, since they'll not be used by clients of
FrameTracker. This should also reduce slow memory pressure build up
because of mPartialResult growth as and when there are error frames
which have some partial results as well.

Bug: 167944895

Test: GCA on Pixel2, constant mode changes don't show steady state increase in
      mPartialResults map size (Basic validity)

Change-Id: I6de585deb24039321310ddbd5dccd9119b25b23d
Signed-off-by: default avatarJayant Chowdhary <jchowdhary@google.com>
(cherry picked from commit 91e64e2d)
parent 9fa99145
Loading
Loading
Loading
Loading
+16 −17
Original line number Diff line number Diff line
@@ -70,30 +70,29 @@ public class FrameNumberTracker {
            int requestType = (int) pair.getValue();
            Boolean removeError = false;
            if (errorFrameNumber == mCompletedFrameNumber[requestType] + 1) {
                mCompletedFrameNumber[requestType] = errorFrameNumber;
                removeError = true;
            } else {
            }
            // The error frame number could have also either been in the pending list or one of the
            // 'other' pending lists.
            if (!mPendingFrameNumbers[requestType].isEmpty()) {
                if (errorFrameNumber == mPendingFrameNumbers[requestType].element()) {
                        mCompletedFrameNumber[requestType] = errorFrameNumber;
                    mPendingFrameNumbers[requestType].remove();
                    removeError = true;
                }
            } else {
                for (int i = 1; i < CaptureRequest.REQUEST_TYPE_COUNT; i++) {
                    int otherType = (requestType + i) % CaptureRequest.REQUEST_TYPE_COUNT;
                        if (!mPendingFrameNumbersWithOtherType[otherType].isEmpty()
                                && errorFrameNumber
                    if (!mPendingFrameNumbersWithOtherType[otherType].isEmpty() && errorFrameNumber
                            == mPendingFrameNumbersWithOtherType[otherType].element()) {
                            mCompletedFrameNumber[requestType] = errorFrameNumber;
                        mPendingFrameNumbersWithOtherType[otherType].remove();
                        removeError = true;
                        break;
                    }
                }
            }
            }
            if (removeError) {
                mCompletedFrameNumber[requestType] = errorFrameNumber;
                mPartialResults.remove(errorFrameNumber);
                iter.remove();
            }
        }