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: Jayant Chowdhary <jchowdhary@google.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
// 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()) {
|
||||
mPendingFrameNumbers[requestType].remove();
|
||||
removeError = true;
|
||||
}
|
||||
} else {
|
||||
if (!mPendingFrameNumbers[requestType].isEmpty()) {
|
||||
if (errorFrameNumber == mPendingFrameNumbers[requestType].element()) {
|
||||
mCompletedFrameNumber[requestType] = errorFrameNumber;
|
||||
mPendingFrameNumbers[requestType].remove();
|
||||
for (int i = 1; i < CaptureRequest.REQUEST_TYPE_COUNT; i++) {
|
||||
int otherType = (requestType + i) % CaptureRequest.REQUEST_TYPE_COUNT;
|
||||
if (!mPendingFrameNumbersWithOtherType[otherType].isEmpty() && errorFrameNumber
|
||||
== mPendingFrameNumbersWithOtherType[otherType].element()) {
|
||||
mPendingFrameNumbersWithOtherType[otherType].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
|
||||
== mPendingFrameNumbersWithOtherType[otherType].element()) {
|
||||
mCompletedFrameNumber[requestType] = errorFrameNumber;
|
||||
mPendingFrameNumbersWithOtherType[otherType].remove();
|
||||
removeError = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (removeError) {
|
||||
mCompletedFrameNumber[requestType] = errorFrameNumber;
|
||||
mPartialResults.remove(errorFrameNumber);
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user