Skip to content

Commit

Permalink
Tweak verbose log messages in ImageReaderSurfaceProducer (#50831)
Browse files Browse the repository at this point in the history
- Tweak log output.
- Increase MAX_IMAGES from 4 to 5 to avoid a JNI warning message in the
common case.
  • Loading branch information
johnmccutchan authored Feb 21, 2024
1 parent 4ea0148 commit 7a58dac
Showing 1 changed file with 40 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ final class ImageReaderSurfaceProducer
TextureRegistry.ImageConsumer,
TextureRegistry.OnTrimMemoryListener {
private static final String TAG = "ImageReaderSurfaceProducer";
private static final int MAX_IMAGES = 4;
private static final int MAX_IMAGES = 5;

// Flip when debugging to see verbose logs.
private static final boolean VERBOSE_LOGS = false;
Expand Down Expand Up @@ -467,10 +467,11 @@ private class PerImageReader {
} catch (IllegalStateException e) {
Log.e(TAG, "onImageAvailable acquireLatestImage failed: " + e);
}
if (released || closed) {
if (image == null) {
return;
}
if (image == null) {
if (released || closed) {
image.close();
return;
}
onImage(reader, image);
Expand All @@ -490,6 +491,9 @@ PerImage queueImage(Image image) {
// If we fall too far behind we will skip some frames.
while (imageQueue.size() > 2) {
PerImage r = imageQueue.removeFirst();
if (VERBOSE_LOGS) {
Log.i(TAG, "" + reader.hashCode() + " force closed image=" + r.image.hashCode());
}
r.image.close();
}
return perImage;
Expand Down Expand Up @@ -529,14 +533,15 @@ PerImageReader getOrCreatePerImageReader(ImageReader reader) {
r = new PerImageReader(reader);
perImageReaders.put(reader, r);
imageReaderQueue.add(r);
if (VERBOSE_LOGS) {
Log.i(TAG, "imageReaderQueue#=" + imageReaderQueue.size());
}
}
return r;
}

void pruneImageReaderQueue() {
if (VERBOSE_LOGS) {
Log.i(TAG, "Pruning image reader queue length=" + imageReaderQueue.size());
}
boolean change = false;
// Prune nodes from the head of the ImageReader queue.
while (imageReaderQueue.size() > 1) {
PerImageReader r = imageReaderQueue.peekFirst();
Expand All @@ -547,8 +552,9 @@ void pruneImageReaderQueue() {
imageReaderQueue.removeFirst();
perImageReaders.remove(r.reader);
r.close();
change = true;
}
if (VERBOSE_LOGS) {
if (change && VERBOSE_LOGS) {
Log.i(TAG, "Pruned image reader queue length=" + imageReaderQueue.size());
}
}
Expand All @@ -569,7 +575,9 @@ void onImage(ImageReader reader, Image image) {
long queueDelta = now - lastQueueTime;
Log.i(
TAG,
"enqueued image="
""
+ reader.hashCode()
+ " enqueued image="
+ queuedImage.image.hashCode()
+ " queueDelta="
+ deltaMillis(queueDelta));
Expand Down Expand Up @@ -598,7 +606,9 @@ PerImage dequeueImage() {
long scheduleDelay = now - lastScheduleTime;
Log.i(
TAG,
"dequeued image="
""
+ reader.reader.hashCode()
+ " dequeued image="
+ r.image.hashCode()
+ " queuedFor= "
+ deltaMillis(queuedFor)
Expand All @@ -612,6 +622,14 @@ PerImage dequeueImage() {
}
}
if (lastDequeuedImage != null) {
if (VERBOSE_LOGS) {
Log.i(
TAG,
""
+ lastReaderDequeuedFrom.reader.hashCode()
+ " closing image="
+ lastDequeuedImage.image.hashCode());
}
// We must keep the last image dequeued open until we are done presenting it.
// We have just dequeued a new image (r). Close the previously dequeued image.
lastDequeuedImage.image.close();
Expand Down Expand Up @@ -642,6 +660,9 @@ private void releaseInternal() {
private void cleanup() {
synchronized (lock) {
for (PerImageReader pir : perImageReaders.values()) {
if (lastReaderDequeuedFrom == pir) {
lastReaderDequeuedFrom = null;
}
pir.close();
}
perImageReaders.clear();
Expand Down Expand Up @@ -730,6 +751,9 @@ public int getHeight() {
@Override
public Surface getSurface() {
PerImageReader pir = getActiveReader();
if (VERBOSE_LOGS) {
Log.i(TAG, "" + pir.reader.hashCode() + " returning surface to render a new frame.");
}
return pir.reader.getSurface();
}

Expand Down Expand Up @@ -762,7 +786,13 @@ private PerImageReader getActiveReader() {
if (createNewReader) {
createNewReader = false;
// Create a new ImageReader and add it to the queue.
return getOrCreatePerImageReader(createImageReader());
ImageReader reader = createImageReader();
if (VERBOSE_LOGS) {
Log.i(
TAG,
"" + reader.hashCode() + " created w=" + requestedWidth + " h=" + requestedHeight);
}
return getOrCreatePerImageReader(reader);
}
return imageReaderQueue.peekLast();
}
Expand Down

0 comments on commit 7a58dac

Please sign in to comment.