Flutter Engine
 
Loading...
Searching...
No Matches
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::sysmem2::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< 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
 
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 45 of file vulkan_surface.h.

Constructor & Destructor Documentation

◆ VulkanSurface()

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

Definition at line 149 of file vulkan_surface.cc.

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

References FML_CHECK, and FML_LOG.

◆ ~VulkanSurface()

flutter_runner::VulkanSurface::~VulkanSurface ( )
override

Definition at line 179 of file vulkan_surface.cc.

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

Member Function Documentation

◆ AdvanceAndGetAge()

size_t flutter_runner::VulkanSurface::AdvanceAndGetAge ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 479 of file vulkan_surface.cc.

479 {
480 size_history_[size_history_index_] = GetSize();
481 size_history_index_ = (size_history_index_ + 1) % kSizeHistorySize;
482 age_++;
483 return age_;
484}
SkISize GetSize() const override

References GetSize().

◆ FlushSessionAcquireAndReleaseEvents()

bool flutter_runner::VulkanSurface::FlushSessionAcquireAndReleaseEvents ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 486 of file vulkan_surface.cc.

486 {
487 age_ = 0;
488 return true;
489}

◆ GetAcquireFence()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 463 of file vulkan_surface.cc.

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

◆ GetAcquireVkSemaphore()

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

Definition at line 99 of file vulkan_surface.h.

99 {
100 return acquire_semaphore_;
101 }

◆ GetAllocationSize()

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

Definition at line 115 of file vulkan_surface.h.

115{ return vk_memory_info_.allocationSize; }

Referenced by IsOversized().

◆ GetBufferCollectionImportToken()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 457 of file vulkan_surface.cc.

457 {
458 fuchsia::ui::composition::BufferCollectionImportToken import_dup;
459 import_token_.value.duplicate(ZX_RIGHT_SAME_RIGHTS, &import_dup.value);
460 return import_dup;
461}

◆ GetCommandBuffer()

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

Definition at line 103 of file vulkan_surface.h.

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

References vulkan::VulkanProvider::vk(), and vulkan::VulkanProvider::vk_device().

◆ GetCommandBufferFence()

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

Definition at line 111 of file vulkan_surface.h.

111 {
112 return command_buffer_fence_;
113 }

◆ GetImageId()

uint32_t flutter_runner::VulkanSurface::GetImageId ( )
overridevirtual

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 448 of file vulkan_surface.cc.

448 {
449 return image_id_;
450}

◆ GetImageMemoryRequirementsSize()

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

Definition at line 117 of file vulkan_surface.h.

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

References flutter_runner::VulkanImage::vk_memory_requirements.

Referenced by IsOversized().

◆ GetReleaseFence()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 469 of file vulkan_surface.cc.

469 {
470 zx::event fence;
471 release_event_.duplicate(ZX_RIGHT_SAME_RIGHTS, &fence);
472 return fence;
473}

◆ GetSize()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 191 of file vulkan_surface.cc.

191 {
192 if (!valid_) {
193 return SkISize::Make(0, 0);
194 }
195
196 return SkISize::Make(sk_surface_->width(), sk_surface_->height());
197}

Referenced by AdvanceAndGetAge().

◆ GetSkiaSurface()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 452 of file vulkan_surface.cc.

452 {
453 return valid_ ? sk_surface_ : nullptr;
454}

◆ GetVkImage()

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

Definition at line 95 of file vulkan_surface.h.

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

References flutter_runner::VulkanImage::vk_image.

◆ HasStableSizeHistory()

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

Definition at line 125 of file vulkan_surface.h.

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

◆ IsOversized()

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

Definition at line 121 of file vulkan_surface.h.

121 {
123 }
size_t GetImageMemoryRequirementsSize() const

References GetAllocationSize(), and GetImageMemoryRequirementsSize().

◆ IsValid()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 187 of file vulkan_surface.cc.

187 {
188 return valid_;
189}

◆ SetImageId()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 443 of file vulkan_surface.cc.

443 {
444 FML_CHECK(image_id_ == 0);
445 image_id_ = image_id;
446}

References FML_CHECK.

◆ SetReleaseImageCallback()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 474 of file vulkan_surface.cc.

475 {
476 release_image_callback_ = release_image_callback;
477}

◆ SignalWritesFinished()

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

Implements flutter_runner::SurfaceProducerSurface.

Definition at line 491 of file vulkan_surface.cc.

492 {
493 FML_CHECK(on_writes_committed);
494
495 if (!valid_) {
496 on_writes_committed();
497 return;
498 }
499
500 FML_CHECK(pending_on_writes_committed_ == nullptr)
501 << "Attempted to signal a write on the surface when the "
502 "previous write has not yet been acknowledged by the "
503 "compositor.";
504
505 pending_on_writes_committed_ = on_writes_committed;
506}

References FML_CHECK.


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