summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2022-10-04 22:19:19 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-10-04 22:19:19 +0000
commit585d2e9ac74710b27e6ec8c35faf2cf567cc788a (patch)
tree4ed4ccd0f64dd262ba83db6bfdd2c163ab84fa34
parent0e20252316b1a6ede45a390522699dae6ffcbecd (diff)
parentff8b5e4309ac7c82a4d648e31c37b38f5f5d5671 (diff)
downloadcts-585d2e9ac74710b27e6ec8c35faf2cf567cc788a.tar.gz
Merge "Camera: Fix race condition in MultiResolutionImageReader test" into android13-tests-dev
-rw-r--r--tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java33
1 files changed, 26 insertions, 7 deletions
diff --git a/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java b/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java
index aecdb34c5a1..b022037c7d7 100644
--- a/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java
+++ b/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java
@@ -724,10 +724,22 @@ public class CameraTestUtils extends Assert {
@Override
public void onImageAvailable(ImageReader reader) {
- if (VERBOSE) Log.v(TAG, "new image available");
+ if (VERBOSE) Log.v(TAG, "new image available from reader " + reader.toString());
if (mAcquireLatest) {
- mLastReader = reader;
+ synchronized (mLock) {
+ // If there is switch of image readers, acquire and releases all images
+ // from the previous image reader
+ if (mLastReader != reader) {
+ if (mLastReader != null) {
+ Image image = mLastReader.acquireLatestImage();
+ if (image != null) {
+ image.close();
+ }
+ }
+ mLastReader = reader;
+ }
+ }
mImageAvailable.open();
} else {
if (mQueue.size() < mMaxBuffers) {
@@ -744,11 +756,17 @@ public class CameraTestUtils extends Assert {
if (mAcquireLatest) {
Image image = null;
if (mImageAvailable.block(timeoutMs)) {
- if (mLastReader != null) {
- image = mLastReader.acquireLatestImage();
- if (VERBOSE) Log.v(TAG, "acquireLatestImage");
- } else {
- fail("invalid image reader");
+ synchronized (mLock) {
+ if (mLastReader != null) {
+ image = mLastReader.acquireLatestImage();
+ if (VERBOSE) Log.v(TAG, "acquireLatestImage from "
+ + mLastReader.toString() + " produces " + image);
+ if (image == null) {
+ return null;
+ }
+ } else {
+ fail("invalid image reader");
+ }
}
mImageAvailable.close();
} else {
@@ -783,6 +801,7 @@ public class CameraTestUtils extends Assert {
private final boolean mAcquireLatest;
private ConditionVariable mImageAvailable = new ConditionVariable();
private ImageReader mLastReader = null;
+ private final Object mLock = new Object();
}
public static class SimpleCaptureCallback extends CameraCaptureSession.CaptureCallback {