Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
flutter_runner::SoftwareSurface Class Referencefinal

#include <software_surface.h>

Inheritance diagram for flutter_runner::SoftwareSurface:
flutter_runner::SurfaceProducerSurface

Public Member Functions

 SoftwareSurface (fuchsia::sysmem2::AllocatorSyncPtr &sysmem_allocator, fuchsia::ui::composition::AllocatorPtr &flatland_allocator, const SkISize &size)
 
 ~SoftwareSurface () override
 
size_t GetAllocationSize () const
 
size_t AdvanceAndGetAge () override
 
bool FlushSessionAcquireAndReleaseEvents () override
 
bool IsValid () const override
 
SkISize GetSize () const override
 
void SignalWritesFinished (const std::function< void(void)> &on_surface_read_finished) override
 
void SetImageId (uint32_t image_id) override
 
uint32_t GetImageId () override
 
sk_sp< SkSurface > GetSkiaSurface () const override
 
fuchsia::ui::composition::BufferCollectionImportToken GetBufferCollectionImportToken () override
 
zx::event GetAcquireFence () override
 
zx::event GetReleaseFence () override
 
void SetReleaseImageCallback (ReleaseImageCallback release_image_callback) override
 
- Public Member Functions inherited from flutter_runner::SurfaceProducerSurface
virtual ~SurfaceProducerSurface ()=default
 

Detailed Description

Definition at line 25 of file software_surface.h.

Constructor & Destructor Documentation

◆ SoftwareSurface()

flutter_runner::SoftwareSurface::SoftwareSurface ( fuchsia::sysmem2::AllocatorSyncPtr &  sysmem_allocator,
fuchsia::ui::composition::AllocatorPtr &  flatland_allocator,
const SkISize &  size 
)

Definition at line 47 of file software_surface.cc.

51 : wait_for_surface_read_finished_(this) {
52 FML_CHECK(flatland_allocator.is_bound());
53
54 if (!SetupSkiaSurface(sysmem_allocator, flatland_allocator, size)) {
55 FML_LOG(ERROR) << "Could not create render surface.";
56 return;
57 }
58
59 if (!CreateFences()) {
60 FML_LOG(ERROR) << "Could not create signal fences.";
61 return;
62 }
63
64 wait_for_surface_read_finished_.set_object(release_event_.get());
65 wait_for_surface_read_finished_.set_trigger(ZX_EVENT_SIGNALED);
66 Reset();
67
68 valid_ = true;
69}
#define FML_LOG(severity)
Definition logging.h:101
#define FML_CHECK(condition)
Definition logging.h:104

References FML_CHECK, and FML_LOG.

◆ ~SoftwareSurface()

flutter_runner::SoftwareSurface::~SoftwareSurface ( )
override

Definition at line 71 of file software_surface.cc.

71 {
72 release_image_callback_();
73 wait_for_surface_read_finished_.Cancel();
74 wait_for_surface_read_finished_.set_object(ZX_HANDLE_INVALID);
75}

Member Function Documentation

◆ AdvanceAndGetAge()

size_t flutter_runner::SoftwareSurface::AdvanceAndGetAge ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 326 of file software_surface.cc.

326 {
327 return ++age_;
328}

◆ FlushSessionAcquireAndReleaseEvents()

bool flutter_runner::SoftwareSurface::FlushSessionAcquireAndReleaseEvents ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 330 of file software_surface.cc.

330 {
331 age_ = 0;
332 return true;
333}

◆ GetAcquireFence()

zx::event flutter_runner::SoftwareSurface::GetAcquireFence ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 310 of file software_surface.cc.

310 {
311 zx::event fence;
312 acquire_event_.duplicate(ZX_RIGHT_SAME_RIGHTS, &fence);
313 return fence;
314}

◆ GetAllocationSize()

size_t flutter_runner::SoftwareSurface::GetAllocationSize ( ) const
inline

Definition at line 33 of file software_surface.h.

33{ return surface_size_bytes_; }

◆ GetBufferCollectionImportToken()

fuchsia::ui::composition::BufferCollectionImportToken flutter_runner::SoftwareSurface::GetBufferCollectionImportToken ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 304 of file software_surface.cc.

304 {
305 fuchsia::ui::composition::BufferCollectionImportToken import_dup;
306 import_token_.value.duplicate(ZX_RIGHT_SAME_RIGHTS, &import_dup.value);
307 return import_dup;
308}

◆ GetImageId()

uint32_t flutter_runner::SoftwareSurface::GetImageId ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 295 of file software_surface.cc.

295 {
296 return image_id_;
297}

◆ GetReleaseFence()

zx::event flutter_runner::SoftwareSurface::GetReleaseFence ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 316 of file software_surface.cc.

316 {
317 zx::event fence;
318 release_event_.duplicate(ZX_RIGHT_SAME_RIGHTS, &fence);
319 return fence;
320}

◆ GetSize()

SkISize flutter_runner::SoftwareSurface::GetSize ( ) const
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 81 of file software_surface.cc.

81 {
82 if (!valid_) {
83 return SkISize::Make(0, 0);
84 }
85
86 return SkISize::Make(sk_surface_->width(), sk_surface_->height());
87}

◆ GetSkiaSurface()

sk_sp< SkSurface > flutter_runner::SoftwareSurface::GetSkiaSurface ( ) const
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 299 of file software_surface.cc.

299 {
300 return valid_ ? sk_surface_ : nullptr;
301}

◆ IsValid()

bool flutter_runner::SoftwareSurface::IsValid ( ) const
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 77 of file software_surface.cc.

77 {
78 return valid_;
79}

◆ SetImageId()

void flutter_runner::SoftwareSurface::SetImageId ( uint32_t  image_id)
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 290 of file software_surface.cc.

290 {
291 FML_CHECK(image_id_ == 0);
292 image_id_ = image_id;
293}

References FML_CHECK.

◆ SetReleaseImageCallback()

void flutter_runner::SoftwareSurface::SetReleaseImageCallback ( ReleaseImageCallback  release_image_callback)
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 321 of file software_surface.cc.

322 {
323 release_image_callback_ = release_image_callback;
324}

◆ SignalWritesFinished()

void flutter_runner::SoftwareSurface::SignalWritesFinished ( const std::function< void(void)> &  on_surface_read_finished)
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 335 of file software_surface.cc.

336 {
337 FML_CHECK(on_surface_read_finished);
338
339 if (!valid_) {
340 on_surface_read_finished();
341 return;
342 }
343
344 FML_CHECK(surface_read_finished_callback_ == nullptr)
345 << "Attempted to signal a write on the surface when the "
346 "previous write has not yet been acknowledged by the "
347 "compositor.";
348 surface_read_finished_callback_ = on_surface_read_finished;
349
350 // Sysmem *may* require the cache to be cleared after writes to the surface
351 // are complete.
352 if (needs_cache_clean_) {
353 surface_vmo_.op_range(ZX_VMO_OP_CACHE_CLEAN, 0, surface_size_bytes_,
354 /*buffer*/ nullptr,
355 /*buffer_size*/ 0);
356 }
357
358 // Inform scenic that flutter is finished writing to the surface.
359 zx_status_t signal_status = acquire_event_.signal(0u, ZX_EVENT_SIGNALED);
360 if (signal_status != ZX_OK) {
361 FML_LOG(ERROR) << "Failed to signal acquire event; "
362 << zx_status_get_string(signal_status);
363 }
364}

References FML_CHECK, and FML_LOG.


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