Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
flutter_runner::VulkanSurface Class Referencefinal

#include <vulkan_surface.h>

Inheritance diagram for flutter_runner::VulkanSurface:
flutter_runner::SurfaceProducerSurface

Public Member Functions

 VulkanSurface (vulkan::VulkanProvider &vulkan_provider, fuchsia::sysmem::AllocatorSyncPtr &sysmem_allocator, fuchsia::ui::composition::AllocatorPtr &flatland_allocator, sk_sp< GrDirectContext > context, const SkISize &size)
 
 ~VulkanSurface () override
 
size_t AdvanceAndGetAge () override
 
bool FlushSessionAcquireAndReleaseEvents () override
 
bool IsValid () const override
 
SkISize GetSize () const override
 
void SignalWritesFinished (const std::function< void(void)> &on_writes_committed) override
 
void SetImageId (uint32_t image_id) override
 
uint32_t GetImageId () override
 
sk_sp< SkSurfaceGetSkiaSurface () const override
 
fuchsia::ui::composition::BufferCollectionImportToken GetBufferCollectionImportToken () override
 
zx::event GetAcquireFence () override
 
zx::event GetReleaseFence () override
 
void SetReleaseImageCallback (ReleaseImageCallback release_image_callback) override
 
const vulkan::VulkanHandle< VkImage > & GetVkImage ()
 
const vulkan::VulkanHandle< VkSemaphore > & GetAcquireVkSemaphore ()
 
vulkan::VulkanCommandBufferGetCommandBuffer (const vulkan::VulkanHandle< VkCommandPool > &pool)
 
const vulkan::VulkanHandle< VkFence > & GetCommandBufferFence ()
 
size_t GetAllocationSize () const
 
size_t GetImageMemoryRequirementsSize () const
 
bool IsOversized () const
 
bool HasStableSizeHistory () const
 
- Public Member Functions inherited from flutter_runner::SurfaceProducerSurface
virtual ~SurfaceProducerSurface ()=default
 

Detailed Description

Definition at line 44 of file vulkan_surface.h.

Constructor & Destructor Documentation

◆ VulkanSurface()

flutter_runner::VulkanSurface::VulkanSurface ( vulkan::VulkanProvider vulkan_provider,
fuchsia::sysmem::AllocatorSyncPtr &  sysmem_allocator,
fuchsia::ui::composition::AllocatorPtr &  flatland_allocator,
sk_sp< GrDirectContext context,
const SkISize size 
)

Definition at line 147 of file vulkan_surface.cc.

153 : vulkan_provider_(vulkan_provider), wait_(this) {
154 FML_CHECK(flatland_allocator.is_bound());
155 FML_CHECK(context != nullptr);
156
157 if (!AllocateDeviceMemory(sysmem_allocator, flatland_allocator,
158 std::move(context), size)) {
159 FML_LOG(ERROR) << "VulkanSurface: Could not allocate device memory.";
160 return;
161 }
162
163 if (!CreateFences()) {
164 FML_LOG(ERROR) << "VulkanSurface: Could not create signal fences.";
165 return;
166 }
167
168 std::fill(size_history_.begin(), size_history_.end(), SkISize::MakeEmpty());
169
170 wait_.set_object(release_event_.get());
171 wait_.set_trigger(ZX_EVENT_SIGNALED);
172 Reset();
173
174 valid_ = true;
175}
#define FML_LOG(severity)
Definition logging.h:82
#define FML_CHECK(condition)
Definition logging.h:85
static constexpr SkISize MakeEmpty()
Definition SkSize.h:22
#define ERROR(message)

◆ ~VulkanSurface()

flutter_runner::VulkanSurface::~VulkanSurface ( )
override

Definition at line 177 of file vulkan_surface.cc.

177 {
178 if (release_image_callback_) {
179 release_image_callback_();
180 }
181 wait_.Cancel();
182 wait_.set_object(ZX_HANDLE_INVALID);
183}

Member Function Documentation

◆ AdvanceAndGetAge()

size_t flutter_runner::VulkanSurface::AdvanceAndGetAge ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 473 of file vulkan_surface.cc.

473 {
474 size_history_[size_history_index_] = GetSize();
475 size_history_index_ = (size_history_index_ + 1) % kSizeHistorySize;
476 age_++;
477 return age_;
478}
SkISize GetSize() const override

◆ FlushSessionAcquireAndReleaseEvents()

bool flutter_runner::VulkanSurface::FlushSessionAcquireAndReleaseEvents ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 480 of file vulkan_surface.cc.

480 {
481 age_ = 0;
482 return true;
483}

◆ GetAcquireFence()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 457 of file vulkan_surface.cc.

457 {
458 zx::event fence;
459 acquire_event_.duplicate(ZX_RIGHT_SAME_RIGHTS, &fence);
460 return fence;
461}

◆ GetAcquireVkSemaphore()

const vulkan::VulkanHandle< VkSemaphore > & flutter_runner::VulkanSurface::GetAcquireVkSemaphore ( )
inline

Definition at line 98 of file vulkan_surface.h.

98 {
99 return acquire_semaphore_;
100 }

◆ GetAllocationSize()

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

Definition at line 114 of file vulkan_surface.h.

114{ return vk_memory_info_.allocationSize; }
VkDeviceSize allocationSize

◆ GetBufferCollectionImportToken()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 451 of file vulkan_surface.cc.

451 {
452 fuchsia::ui::composition::BufferCollectionImportToken import_dup;
453 import_token_.value.duplicate(ZX_RIGHT_SAME_RIGHTS, &import_dup.value);
454 return import_dup;
455}

◆ GetCommandBuffer()

vulkan::VulkanCommandBuffer * flutter_runner::VulkanSurface::GetCommandBuffer ( const vulkan::VulkanHandle< VkCommandPool > &  pool)
inline

Definition at line 102 of file vulkan_surface.h.

103 {
104 if (!command_buffer_)
105 command_buffer_ = std::make_unique<vulkan::VulkanCommandBuffer>(
106 vulkan_provider_.vk(), vulkan_provider_.vk_device(), pool);
107 return command_buffer_.get();
108 }
AutoreleasePool pool
virtual const vulkan::VulkanProcTable & vk()=0
virtual const vulkan::VulkanHandle< VkDevice > & vk_device()=0

◆ GetCommandBufferFence()

const vulkan::VulkanHandle< VkFence > & flutter_runner::VulkanSurface::GetCommandBufferFence ( )
inline

Definition at line 110 of file vulkan_surface.h.

110 {
111 return command_buffer_fence_;
112 }

◆ GetImageId()

uint32_t flutter_runner::VulkanSurface::GetImageId ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 442 of file vulkan_surface.cc.

442 {
443 return image_id_;
444}

◆ GetImageMemoryRequirementsSize()

size_t flutter_runner::VulkanSurface::GetImageMemoryRequirementsSize ( ) const
inline

Definition at line 116 of file vulkan_surface.h.

116 {
117 return vulkan_image_.vk_memory_requirements.size;
118 }
VkMemoryRequirements vk_memory_requirements

◆ GetReleaseFence()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 463 of file vulkan_surface.cc.

463 {
464 zx::event fence;
465 release_event_.duplicate(ZX_RIGHT_SAME_RIGHTS, &fence);
466 return fence;
467}

◆ GetSize()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 189 of file vulkan_surface.cc.

189 {
190 if (!valid_) {
191 return SkISize::Make(0, 0);
192 }
193
194 return SkISize::Make(sk_surface_->width(), sk_surface_->height());
195}
int width() const
Definition SkSurface.h:178
int height() const
Definition SkSurface.h:184
static constexpr SkISize Make(int32_t w, int32_t h)
Definition SkSize.h:20

◆ GetSkiaSurface()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 446 of file vulkan_surface.cc.

446 {
447 return valid_ ? sk_surface_ : nullptr;
448}

◆ GetVkImage()

const vulkan::VulkanHandle< VkImage > & flutter_runner::VulkanSurface::GetVkImage ( )
inline

Definition at line 94 of file vulkan_surface.h.

94 {
95 return vulkan_image_.vk_image;
96 }
vulkan::VulkanHandle< VkImage > vk_image

◆ HasStableSizeHistory()

bool flutter_runner::VulkanSurface::HasStableSizeHistory ( ) const
inline

Definition at line 124 of file vulkan_surface.h.

124 {
125 return std::equal(size_history_.begin() + 1, size_history_.end(),
126 size_history_.begin());
127 }

◆ IsOversized()

bool flutter_runner::VulkanSurface::IsOversized ( ) const
inline

Definition at line 120 of file vulkan_surface.h.

120 {
122 }
size_t GetImageMemoryRequirementsSize() const

◆ IsValid()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 185 of file vulkan_surface.cc.

185 {
186 return valid_;
187}

◆ SetImageId()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 437 of file vulkan_surface.cc.

437 {
438 FML_CHECK(image_id_ == 0);
439 image_id_ = image_id;
440}

◆ SetReleaseImageCallback()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 468 of file vulkan_surface.cc.

469 {
470 release_image_callback_ = release_image_callback;
471}

◆ SignalWritesFinished()

void flutter_runner::VulkanSurface::SignalWritesFinished ( const std::function< void(void)> &  on_writes_committed)
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 485 of file vulkan_surface.cc.

486 {
487 FML_CHECK(on_writes_committed);
488
489 if (!valid_) {
490 on_writes_committed();
491 return;
492 }
493
494 FML_CHECK(pending_on_writes_committed_ == nullptr)
495 << "Attempted to signal a write on the surface when the "
496 "previous write has not yet been acknowledged by the "
497 "compositor.";
498
499 pending_on_writes_committed_ = on_writes_committed;
500}

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