Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 7a58dac

Browse files
Tweak verbose log messages in ImageReaderSurfaceProducer (#50831)
- Tweak log output. - Increase MAX_IMAGES from 4 to 5 to avoid a JNI warning message in the common case.
1 parent 4ea0148 commit 7a58dac

File tree

1 file changed

+40
-10
lines changed

1 file changed

+40
-10
lines changed

shell/platform/android/io/flutter/embedding/engine/renderer/FlutterRenderer.java

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ final class ImageReaderSurfaceProducer
409409
TextureRegistry.ImageConsumer,
410410
TextureRegistry.OnTrimMemoryListener {
411411
private static final String TAG = "ImageReaderSurfaceProducer";
412-
private static final int MAX_IMAGES = 4;
412+
private static final int MAX_IMAGES = 5;
413413

414414
// Flip when debugging to see verbose logs.
415415
private static final boolean VERBOSE_LOGS = false;
@@ -467,10 +467,11 @@ private class PerImageReader {
467467
} catch (IllegalStateException e) {
468468
Log.e(TAG, "onImageAvailable acquireLatestImage failed: " + e);
469469
}
470-
if (released || closed) {
470+
if (image == null) {
471471
return;
472472
}
473-
if (image == null) {
473+
if (released || closed) {
474+
image.close();
474475
return;
475476
}
476477
onImage(reader, image);
@@ -490,6 +491,9 @@ PerImage queueImage(Image image) {
490491
// If we fall too far behind we will skip some frames.
491492
while (imageQueue.size() > 2) {
492493
PerImage r = imageQueue.removeFirst();
494+
if (VERBOSE_LOGS) {
495+
Log.i(TAG, "" + reader.hashCode() + " force closed image=" + r.image.hashCode());
496+
}
493497
r.image.close();
494498
}
495499
return perImage;
@@ -529,14 +533,15 @@ PerImageReader getOrCreatePerImageReader(ImageReader reader) {
529533
r = new PerImageReader(reader);
530534
perImageReaders.put(reader, r);
531535
imageReaderQueue.add(r);
536+
if (VERBOSE_LOGS) {
537+
Log.i(TAG, "imageReaderQueue#=" + imageReaderQueue.size());
538+
}
532539
}
533540
return r;
534541
}
535542

536543
void pruneImageReaderQueue() {
537-
if (VERBOSE_LOGS) {
538-
Log.i(TAG, "Pruning image reader queue length=" + imageReaderQueue.size());
539-
}
544+
boolean change = false;
540545
// Prune nodes from the head of the ImageReader queue.
541546
while (imageReaderQueue.size() > 1) {
542547
PerImageReader r = imageReaderQueue.peekFirst();
@@ -547,8 +552,9 @@ void pruneImageReaderQueue() {
547552
imageReaderQueue.removeFirst();
548553
perImageReaders.remove(r.reader);
549554
r.close();
555+
change = true;
550556
}
551-
if (VERBOSE_LOGS) {
557+
if (change && VERBOSE_LOGS) {
552558
Log.i(TAG, "Pruned image reader queue length=" + imageReaderQueue.size());
553559
}
554560
}
@@ -569,7 +575,9 @@ void onImage(ImageReader reader, Image image) {
569575
long queueDelta = now - lastQueueTime;
570576
Log.i(
571577
TAG,
572-
"enqueued image="
578+
""
579+
+ reader.hashCode()
580+
+ " enqueued image="
573581
+ queuedImage.image.hashCode()
574582
+ " queueDelta="
575583
+ deltaMillis(queueDelta));
@@ -598,7 +606,9 @@ PerImage dequeueImage() {
598606
long scheduleDelay = now - lastScheduleTime;
599607
Log.i(
600608
TAG,
601-
"dequeued image="
609+
""
610+
+ reader.reader.hashCode()
611+
+ " dequeued image="
602612
+ r.image.hashCode()
603613
+ " queuedFor= "
604614
+ deltaMillis(queuedFor)
@@ -612,6 +622,14 @@ PerImage dequeueImage() {
612622
}
613623
}
614624
if (lastDequeuedImage != null) {
625+
if (VERBOSE_LOGS) {
626+
Log.i(
627+
TAG,
628+
""
629+
+ lastReaderDequeuedFrom.reader.hashCode()
630+
+ " closing image="
631+
+ lastDequeuedImage.image.hashCode());
632+
}
615633
// We must keep the last image dequeued open until we are done presenting it.
616634
// We have just dequeued a new image (r). Close the previously dequeued image.
617635
lastDequeuedImage.image.close();
@@ -642,6 +660,9 @@ private void releaseInternal() {
642660
private void cleanup() {
643661
synchronized (lock) {
644662
for (PerImageReader pir : perImageReaders.values()) {
663+
if (lastReaderDequeuedFrom == pir) {
664+
lastReaderDequeuedFrom = null;
665+
}
645666
pir.close();
646667
}
647668
perImageReaders.clear();
@@ -730,6 +751,9 @@ public int getHeight() {
730751
@Override
731752
public Surface getSurface() {
732753
PerImageReader pir = getActiveReader();
754+
if (VERBOSE_LOGS) {
755+
Log.i(TAG, "" + pir.reader.hashCode() + " returning surface to render a new frame.");
756+
}
733757
return pir.reader.getSurface();
734758
}
735759

@@ -762,7 +786,13 @@ private PerImageReader getActiveReader() {
762786
if (createNewReader) {
763787
createNewReader = false;
764788
// Create a new ImageReader and add it to the queue.
765-
return getOrCreatePerImageReader(createImageReader());
789+
ImageReader reader = createImageReader();
790+
if (VERBOSE_LOGS) {
791+
Log.i(
792+
TAG,
793+
"" + reader.hashCode() + " created w=" + requestedWidth + " h=" + requestedHeight);
794+
}
795+
return getOrCreatePerImageReader(reader);
766796
}
767797
return imageReaderQueue.peekLast();
768798
}

0 commit comments

Comments
 (0)