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

#include <vulkan_surface_producer.h>

Inheritance diagram for flutter_runner::VulkanSurfaceProducer:
flutter_runner::SurfaceProducer vulkan::VulkanProvider

Public Member Functions

 VulkanSurfaceProducer ()
 
 ~VulkanSurfaceProducer () override
 
bool IsValid () const
 
GrDirectContextgr_context () const override
 
std::unique_ptr< SurfaceProducerSurfaceProduceOffscreenSurface (const SkISize &size) override
 
std::unique_ptr< SurfaceProducerSurfaceProduceSurface (const SkISize &size) override
 
void SubmitSurfaces (std::vector< std::unique_ptr< SurfaceProducerSurface > > surfaces) override
 
- Public Member Functions inherited from flutter_runner::SurfaceProducer
virtual ~SurfaceProducer ()=default
 
- Public Member Functions inherited from vulkan::VulkanProvider
vulkan::VulkanHandle< VkFence > CreateFence ()
 

Private Member Functions

const vulkan::VulkanProcTablevk () override
 
const vulkan::VulkanHandle< VkDevice > & vk_device () override
 

Detailed Description

Definition at line 26 of file vulkan_surface_producer.h.

Constructor & Destructor Documentation

◆ VulkanSurfaceProducer()

flutter_runner::VulkanSurfaceProducer::VulkanSurfaceProducer ( )
explicit

Definition at line 45 of file vulkan_surface_producer.cc.

45 {
46 valid_ = Initialize();
47
48 if (!valid_) {
49 FML_LOG(FATAL) << "VulkanSurfaceProducer: Initialization failed";
50 }
51}
#define FATAL(error)
#define FML_LOG(severity)
Definition logging.h:82

◆ ~VulkanSurfaceProducer()

flutter_runner::VulkanSurfaceProducer::~VulkanSurfaceProducer ( )
override

Definition at line 53 of file vulkan_surface_producer.cc.

53 {
54 // Make sure queue is idle before we start destroying surfaces
55 if (valid_) {
56 VkResult wait_result = VK_CALL_LOG_ERROR(
57 vk_->QueueWaitIdle(logical_device_->GetQueueHandle()));
58 FML_DCHECK(wait_result == VK_SUCCESS);
59 }
60};
#define FML_DCHECK(condition)
Definition logging.h:103
VkResult
@ VK_SUCCESS
#define VK_CALL_LOG_ERROR(expression)

Member Function Documentation

◆ gr_context()

GrDirectContext * flutter_runner::VulkanSurfaceProducer::gr_context ( ) const
inlineoverridevirtual

Implements flutter_runner::SurfaceProducer.

Definition at line 35 of file vulkan_surface_producer.h.

35{ return context_.get(); }
T * get() const
Definition SkRefCnt.h:303

◆ IsValid()

bool flutter_runner::VulkanSurfaceProducer::IsValid ( ) const
inline

Definition at line 32 of file vulkan_surface_producer.h.

32{ return valid_; }

◆ ProduceOffscreenSurface()

std::unique_ptr< SurfaceProducerSurface > flutter_runner::VulkanSurfaceProducer::ProduceOffscreenSurface ( const SkISize size)
overridevirtual

Implements flutter_runner::SurfaceProducer.

Definition at line 291 of file vulkan_surface_producer.cc.

291 {
292 return surface_pool_->CreateSurface(size);
293}

◆ ProduceSurface()

std::unique_ptr< SurfaceProducerSurface > flutter_runner::VulkanSurfaceProducer::ProduceSurface ( const SkISize size)
overridevirtual

Implements flutter_runner::SurfaceProducer.

Definition at line 277 of file vulkan_surface_producer.cc.

278 {
279 FML_CHECK(valid_);
280 last_produce_time_ = async::Now(async_get_default_dispatcher());
281 return surface_pool_->AcquireSurface(size);
282}
#define FML_CHECK(condition)
Definition logging.h:85

◆ SubmitSurfaces()

void flutter_runner::VulkanSurfaceProducer::SubmitSurfaces ( std::vector< std::unique_ptr< SurfaceProducerSurface > >  surfaces)
overridevirtual

Implements flutter_runner::SurfaceProducer.

Definition at line 173 of file vulkan_surface_producer.cc.

174 {
175 TRACE_EVENT0("flutter", "VulkanSurfaceProducer::SubmitSurfaces");
176
177 // Do a single flush for all canvases derived from the context.
178 {
179 TRACE_EVENT0("flutter", "GrDirectContext::flushAndSignalSemaphores");
180 context_->flushAndSubmit();
181 }
182
183 if (!TransitionSurfacesToExternal(surfaces))
184 FML_LOG(ERROR) << "TransitionSurfacesToExternal failed";
185
186 // Submit surface
187 for (auto& surface : surfaces) {
188 SubmitSurface(std::move(surface));
189 }
190
191 // Buffer management.
192 surface_pool_->AgeAndCollectOldBuffers();
193
194 // If no further surface production has taken place for 10 frames (TODO:
195 // Don't hardcode refresh rate here), then shrink our surface pool to fit.
196 constexpr auto kShouldShrinkThreshold = zx::msec(10 * 16.67);
197 async::PostDelayedTask(
198 async_get_default_dispatcher(),
199 [self = weak_factory_.GetWeakPtr(), kShouldShrinkThreshold] {
200 if (!self) {
201 return;
202 }
203 auto time_since_last_produce =
204 async::Now(async_get_default_dispatcher()) -
205 self->last_produce_time_;
206 if (time_since_last_produce >= kShouldShrinkThreshold) {
207 self->surface_pool_->ShrinkToFit();
208 }
209 },
210 kShouldShrinkThreshold);
211}
void flushAndSubmit(GrSyncCpu sync=GrSyncCpu::kNo)
VkSurfaceKHR surface
Definition main.cc:49
#define ERROR(message)
#define TRACE_EVENT0(category_group, name)

◆ vk()

const vulkan::VulkanProcTable & flutter_runner::VulkanSurfaceProducer::vk ( )
inlineoverrideprivatevirtual

Implements vulkan::VulkanProvider.

Definition at line 51 of file vulkan_surface_producer.h.

51{ return *vk_.get(); }
T * get() const
Definition ref_ptr.h:116

◆ vk_device()

const vulkan::VulkanHandle< VkDevice > & flutter_runner::VulkanSurfaceProducer::vk_device ( )
inlineoverrideprivatevirtual

Implements vulkan::VulkanProvider.

Definition at line 52 of file vulkan_surface_producer.h.

52 {
53 return logical_device_->GetHandle();
54 }

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