Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Member Functions | Protected Member Functions | Package Functions | List of all members
io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer Class Reference
Inheritance diagram for io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer:

Public Member Functions

void onTrimMemory (int level)
 
long id ()
 
void release ()
 
void setSize (int width, int height)
 
int getWidth ()
 
int getHeight ()
 
Surface getSurface ()
 
void scheduleFrame ()
 
Image acquireLatestImage ()
 
void disableFenceForTest ()
 
int numImageReaders ()
 
int numImages ()
 

Protected Member Functions

void finalize () throws Throwable
 

Package Functions

double deltaMillis (long deltaNanos)
 
PerImageReader getOrCreatePerImageReader (ImageReader reader)
 
void pruneImageReaderQueue ()
 
void onImage (ImageReader reader, Image image)
 
PerImage dequeueImage ()
 
 ImageReaderSurfaceProducer (long id)
 

Detailed Description

Definition at line 411 of file FlutterRenderer.java.

Constructor & Destructor Documentation

◆ ImageReaderSurfaceProducer()

io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.ImageReaderSurfaceProducer ( long  id)
inlinepackage

Definition at line 722 of file FlutterRenderer.java.

722 {
723 this.id = id;
724 }

Member Function Documentation

◆ acquireLatestImage()

Image io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.acquireLatestImage ( )
inline

Definition at line 789 of file FlutterRenderer.java.

789 {
790 PerImage r = dequeueImage();
791 if (r == null) {
792 return null;
793 }
794 maybeWaitOnFence(r.image);
795 return r.image;
796 }

◆ deltaMillis()

double io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.deltaMillis ( long  deltaNanos)
inlinepackage

Definition at line 535 of file FlutterRenderer.java.

535 {
536 double ms = (double) deltaNanos / (double) 1000000.0;
537 return ms;
538 }

◆ dequeueImage()

PerImage io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.dequeueImage ( )
inlinepackage

Definition at line 602 of file FlutterRenderer.java.

602 {
603 PerImage r = null;
604 synchronized (lock) {
605 for (PerImageReader reader : imageReaderQueue) {
606 r = reader.dequeueImage();
607 if (r == null) {
608 // This reader is probably about to get pruned.
609 continue;
610 }
611 if (VERBOSE_LOGS) {
612 if (lastDequeueTime != 0) {
613 long now = System.nanoTime();
614 long dequeueDelta = now - lastDequeueTime;
615 long queuedFor = now - r.queuedTime;
616 long scheduleDelay = now - lastScheduleTime;
617 Log.i(
618 TAG,
619 ""
620 + reader.reader.hashCode()
621 + " dequeued image="
622 + r.image.hashCode()
623 + " queuedFor= "
624 + deltaMillis(queuedFor)
625 + " dequeueDelta="
626 + deltaMillis(dequeueDelta)
627 + " scheduleDelay="
628 + deltaMillis(scheduleDelay));
629 lastDequeueTime = now;
630 } else {
631 lastDequeueTime = System.nanoTime();
632 }
633 }
634 if (lastDequeuedImage != null) {
635 if (VERBOSE_LOGS) {
636 Log.i(
637 TAG,
638 ""
639 + lastReaderDequeuedFrom.reader.hashCode()
640 + " closing image="
641 + lastDequeuedImage.image.hashCode());
642 }
643 // We must keep the last image dequeued open until we are done presenting
644 // it. We have just dequeued a new image (r). Close the previously dequeued
645 // image.
646 lastDequeuedImage.image.close();
647 lastDequeuedImage = null;
648 }
649 // Remember the last image and reader dequeued from. We do this because we must
650 // keep both of these alive until we are done presenting the image.
651 lastDequeuedImage = r;
652 lastReaderDequeuedFrom = reader;
653 break;
654 }
656 }
657 return r;
658 }
void Log(const char *format,...) SK_PRINTF_LIKE(1

◆ disableFenceForTest()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.disableFenceForTest ( )
inline

Definition at line 869 of file FlutterRenderer.java.

869 {
870 // Roboelectric's implementation of SyncFence is borked.
871 ignoringFence = true;
872 }

◆ finalize()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.finalize ( ) throws Throwable
inlineprotected

Definition at line 816 of file FlutterRenderer.java.

816 {
817 try {
818 if (released) {
819 return;
820 }
821 releaseInternal();
822 handler.post(new TextureFinalizerRunnable(id, flutterJNI));
823 } finally {
824 super.finalize();
825 }
826 }

◆ getHeight()

int io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.getHeight ( )
inline

Definition at line 761 of file FlutterRenderer.java.

761 {
762 return this.requestedHeight;
763 }

◆ getOrCreatePerImageReader()

PerImageReader io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.getOrCreatePerImageReader ( ImageReader  reader)
inlinepackage

Definition at line 540 of file FlutterRenderer.java.

540 {
541 PerImageReader r = perImageReaders.get(reader);
542 if (r == null) {
543 r = new PerImageReader(reader);
544 perImageReaders.put(reader, r);
545 imageReaderQueue.add(r);
546 if (VERBOSE_LOGS) {
547 Log.i(TAG, "imageReaderQueue#=" + imageReaderQueue.size());
548 }
549 }
550 return r;
551 }

◆ getSurface()

Surface io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.getSurface ( )
inline

Definition at line 766 of file FlutterRenderer.java.

766 {
767 PerImageReader pir = getActiveReader();
768 if (VERBOSE_LOGS) {
769 Log.i(TAG, "" + pir.reader.hashCode() + " returning surface to render a new frame.");
770 }
771 return pir.reader.getSurface();
772 }

◆ getWidth()

int io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.getWidth ( )
inline

Definition at line 756 of file FlutterRenderer.java.

756 {
757 return this.requestedWidth;
758 }

◆ id()

long io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.id ( )
inline

Definition at line 727 of file FlutterRenderer.java.

727 {
728 return id;
729 }

◆ numImageReaders()

int io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.numImageReaders ( )
inline

Definition at line 875 of file FlutterRenderer.java.

875 {
876 synchronized (lock) {
877 return imageReaderQueue.size();
878 }
879 }

◆ numImages()

int io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.numImages ( )
inline

Definition at line 882 of file FlutterRenderer.java.

882 {
883 int r = 0;
884 synchronized (lock) {
885 for (PerImageReader reader : imageReaderQueue) {
886 r += reader.imageQueue.size();
887 }
888 }
889 return r;
890 }

◆ onImage()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.onImage ( ImageReader  reader,
Image  image 
)
inlinepackage

Definition at line 572 of file FlutterRenderer.java.

572 {
573 PerImage queuedImage = null;
574 synchronized (lock) {
575 PerImageReader perReader = getOrCreatePerImageReader(reader);
576 queuedImage = perReader.queueImage(image);
577 }
578 if (queuedImage == null) {
579 // We got a late image.
580 return;
581 }
582 if (VERBOSE_LOGS) {
583 if (lastQueueTime != 0) {
584 long now = System.nanoTime();
585 long queueDelta = now - lastQueueTime;
586 Log.i(
587 TAG,
588 ""
589 + reader.hashCode()
590 + " enqueued image="
591 + queuedImage.image.hashCode()
592 + " queueDelta="
593 + deltaMillis(queueDelta));
594 lastQueueTime = now;
595 } else {
596 lastQueueTime = System.nanoTime();
597 }
598 }
599 scheduleEngineFrame();
600 }
sk_sp< SkImage > image
Definition examples.cpp:29

◆ onTrimMemory()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.onTrimMemory ( int  level)
inline

Definition at line 661 of file FlutterRenderer.java.

661 {
662 if (!CLEANUP_ON_MEMORY_PRESSURE) {
663 return;
664 }
665 cleanup();
666 createNewReader = true;
667 }

◆ pruneImageReaderQueue()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.pruneImageReaderQueue ( )
inlinepackage

Definition at line 553 of file FlutterRenderer.java.

553 {
554 boolean change = false;
555 // Prune nodes from the head of the ImageReader queue.
556 while (imageReaderQueue.size() > 1) {
557 PerImageReader r = imageReaderQueue.peekFirst();
558 if (!r.canPrune()) {
559 // No more ImageReaders can be pruned this round.
560 break;
561 }
562 imageReaderQueue.removeFirst();
563 perImageReaders.remove(r.reader);
564 r.close();
565 change = true;
566 }
567 if (change && VERBOSE_LOGS) {
568 Log.i(TAG, "Pruned image reader queue length=" + imageReaderQueue.size());
569 }
570 }

◆ release()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.release ( )
inline

Definition at line 732 of file FlutterRenderer.java.

732 {
733 if (released) {
734 return;
735 }
736 releaseInternal();
737 unregisterTexture(id);
738 }

◆ scheduleFrame()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.scheduleFrame ( )
inline

Definition at line 775 of file FlutterRenderer.java.

775 {
776 if (VERBOSE_LOGS) {
777 long now = System.nanoTime();
778 if (lastScheduleTime != 0) {
779 long delta = now - lastScheduleTime;
780 Log.v(TAG, "scheduleFrame delta=" + deltaMillis(delta));
781 }
782 lastScheduleTime = now;
783 }
784 scheduleEngineFrame();
785 }

◆ setSize()

void io.flutter.embedding.engine.renderer.FlutterRenderer.ImageReaderSurfaceProducer.setSize ( int  width,
int  height 
)
inline

Definition at line 741 of file FlutterRenderer.java.

741 {
742 // Clamp to a minimum of 1. A 0x0 texture is a runtime exception in ImageReader.
743 width = Math.max(1, width);
744 height = Math.max(1, height);
745
746 if (requestedWidth == width && requestedHeight == height) {
747 // No size change.
748 return;
749 }
750 this.createNewReader = true;
751 this.requestedHeight = height;
752 this.requestedWidth = width;
753 }
int32_t height
int32_t width

The documentation for this class was generated from the following file: