Flutter Engine
 
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 26 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 48 of file software_surface.cc.

52 : wait_for_surface_read_finished_(this) {
53 FML_CHECK(flatland_allocator.is_bound());
54
55 if (!SetupSkiaSurface(sysmem_allocator, flatland_allocator, size)) {
56 FML_LOG(ERROR) << "Could not create render surface.";
57 return;
58 }
59
60 if (!CreateFences()) {
61 FML_LOG(ERROR) << "Could not create signal fences.";
62 return;
63 }
64
65 wait_for_surface_read_finished_.set_object(release_event_.get());
66 wait_for_surface_read_finished_.set_trigger(ZX_EVENT_SIGNALED);
67 Reset();
68
69 valid_ = true;
70}
#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 72 of file software_surface.cc.

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

Member Function Documentation

◆ AdvanceAndGetAge()

size_t flutter_runner::SoftwareSurface::AdvanceAndGetAge ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 327 of file software_surface.cc.

327 {
328 return ++age_;
329}

◆ FlushSessionAcquireAndReleaseEvents()

bool flutter_runner::SoftwareSurface::FlushSessionAcquireAndReleaseEvents ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 331 of file software_surface.cc.

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

◆ GetAcquireFence()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 311 of file software_surface.cc.

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

◆ GetAllocationSize()

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

Definition at line 34 of file software_surface.h.

34{ return surface_size_bytes_; }

◆ GetBufferCollectionImportToken()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 305 of file software_surface.cc.

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

◆ GetImageId()

uint32_t flutter_runner::SoftwareSurface::GetImageId ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 296 of file software_surface.cc.

296 {
297 return image_id_;
298}

◆ GetReleaseFence()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 317 of file software_surface.cc.

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

◆ GetSize()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 82 of file software_surface.cc.

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

◆ GetSkiaSurface()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 300 of file software_surface.cc.

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

◆ IsValid()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 78 of file software_surface.cc.

78 {
79 return valid_;
80}

◆ SetImageId()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 291 of file software_surface.cc.

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

References FML_CHECK.

◆ SetReleaseImageCallback()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 322 of file software_surface.cc.

323 {
324 release_image_callback_ = release_image_callback;
325}

◆ SignalWritesFinished()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 336 of file software_surface.cc.

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

References FML_CHECK, and FML_LOG.


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