1111#include " third_party/skia/include/core/SkBitmap.h"
1212#include " third_party/skia/include/core/SkImage.h"
1313
14- #ifdef SHELL_ENABLE_GL
15- #include " flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h"
16- #include " flutter/shell/platform/embedder/tests/embedder_test_context_gl.h"
17- #endif
18-
19- #ifdef SHELL_ENABLE_VULKAN
20- #include " flutter/shell/platform/embedder/tests/embedder_test_context_vulkan.h"
21- #include " flutter/vulkan/vulkan_device.h" // nogncheck
22- #include " vulkan/vulkan_core.h" // nogncheck
23- #endif
24-
25- #ifdef SHELL_ENABLE_METAL
26- #include " flutter/shell/platform/embedder/tests/embedder_test_context_metal.h"
27- #endif
28-
29- namespace flutter {
30- namespace testing {
14+ namespace flutter ::testing {
3115
3216EmbedderConfigBuilder::EmbedderConfigBuilder (
3317 EmbedderTestContext& context,
@@ -43,49 +27,9 @@ EmbedderConfigBuilder::EmbedderConfigBuilder(
4327
4428 custom_task_runners_.struct_size = sizeof (FlutterCustomTaskRunners);
4529
46- #ifdef SHELL_ENABLE_GL
47- opengl_renderer_config_.struct_size = sizeof (FlutterOpenGLRendererConfig);
48- opengl_renderer_config_.make_current = [](void * context) -> bool {
49- return reinterpret_cast <EmbedderTestContextGL*>(context)->GLMakeCurrent ();
50- };
51- opengl_renderer_config_.clear_current = [](void * context) -> bool {
52- return reinterpret_cast <EmbedderTestContextGL*>(context)->GLClearCurrent ();
53- };
54- opengl_renderer_config_.present_with_info =
55- [](void * context, const FlutterPresentInfo* present_info) -> bool {
56- return reinterpret_cast <EmbedderTestContextGL*>(context)->GLPresent (
57- *present_info);
58- };
59- opengl_renderer_config_.fbo_with_frame_info_callback =
60- [](void * context, const FlutterFrameInfo* frame_info) -> uint32_t {
61- return reinterpret_cast <EmbedderTestContextGL*>(context)->GLGetFramebuffer (
62- *frame_info);
63- };
64- opengl_renderer_config_.populate_existing_damage = nullptr ;
65- opengl_renderer_config_.make_resource_current = [](void * context) -> bool {
66- return reinterpret_cast <EmbedderTestContextGL*>(context)
67- ->GLMakeResourceCurrent ();
68- };
69- opengl_renderer_config_.gl_proc_resolver = [](void * context,
70- const char * name) -> void * {
71- return reinterpret_cast <EmbedderTestContextGL*>(context)->GLGetProcAddress (
72- name);
73- };
74- opengl_renderer_config_.fbo_reset_after_present = true ;
75- opengl_renderer_config_.surface_transformation =
76- [](void * context) -> FlutterTransformation {
77- return reinterpret_cast <EmbedderTestContext*>(context)
78- ->GetRootSurfaceTransformation ();
79- };
80- #endif
81-
82- #ifdef SHELL_ENABLE_METAL
30+ InitializeGLRendererConfig ();
8331 InitializeMetalRendererConfig ();
84- #endif
85-
86- #ifdef SHELL_ENABLE_VULKAN
8732 InitializeVulkanRendererConfig ();
88- #endif
8933
9034 software_renderer_config_.struct_size = sizeof (FlutterSoftwareRendererConfig);
9135 software_renderer_config_.surface_present_callback =
@@ -141,37 +85,6 @@ void EmbedderConfigBuilder::SetSoftwareRendererConfig(SkISize surface_size) {
14185 context_.SetupSurface (surface_size);
14286}
14387
144- void EmbedderConfigBuilder::SetOpenGLFBOCallBack () {
145- #ifdef SHELL_ENABLE_GL
146- // SetOpenGLRendererConfig must be called before this.
147- FML_CHECK (renderer_config_.type == FlutterRendererType::kOpenGL );
148- renderer_config_.open_gl .fbo_callback = [](void * context) -> uint32_t {
149- FlutterFrameInfo frame_info = {};
150- // fbo_callback doesn't use the frame size information, only
151- // fbo_callback_with_frame_info does.
152- frame_info.struct_size = sizeof (FlutterFrameInfo);
153- frame_info.size .width = 0 ;
154- frame_info.size .height = 0 ;
155- return reinterpret_cast <EmbedderTestContextGL*>(context)->GLGetFramebuffer (
156- frame_info);
157- };
158- #endif
159- }
160-
161- void EmbedderConfigBuilder::SetOpenGLPresentCallBack () {
162- #ifdef SHELL_ENABLE_GL
163- // SetOpenGLRendererConfig must be called before this.
164- FML_CHECK (renderer_config_.type == FlutterRendererType::kOpenGL );
165- renderer_config_.open_gl .present = [](void * context) -> bool {
166- // passing a placeholder fbo_id.
167- return reinterpret_cast <EmbedderTestContextGL*>(context)->GLPresent (
168- FlutterPresentInfo{
169- .fbo_id = 0 ,
170- });
171- };
172- #endif
173- }
174-
17588void EmbedderConfigBuilder::SetRendererConfig (EmbedderTestContextType type,
17689 SkISize surface_size) {
17790 switch (type) {
@@ -190,38 +103,6 @@ void EmbedderConfigBuilder::SetRendererConfig(EmbedderTestContextType type,
190103 }
191104}
192105
193- void EmbedderConfigBuilder::SetOpenGLRendererConfig (SkISize surface_size) {
194- #ifdef SHELL_ENABLE_GL
195- renderer_config_.type = FlutterRendererType::kOpenGL ;
196- renderer_config_.open_gl = opengl_renderer_config_;
197- context_.SetupSurface (surface_size);
198- #endif
199- }
200-
201- void EmbedderConfigBuilder::SetMetalRendererConfig (SkISize surface_size) {
202- #ifdef SHELL_ENABLE_METAL
203- renderer_config_.type = FlutterRendererType::kMetal ;
204- renderer_config_.metal = metal_renderer_config_;
205- context_.SetupSurface (surface_size);
206- #endif
207- }
208-
209- void EmbedderConfigBuilder::SetVulkanRendererConfig (
210- SkISize surface_size,
211- std::optional<FlutterVulkanInstanceProcAddressCallback>
212- instance_proc_address_callback) {
213- #ifdef SHELL_ENABLE_VULKAN
214- renderer_config_.type = FlutterRendererType::kVulkan ;
215- FlutterVulkanRendererConfig vulkan_renderer_config = vulkan_renderer_config_;
216- if (instance_proc_address_callback.has_value ()) {
217- vulkan_renderer_config.get_instance_proc_address_callback =
218- instance_proc_address_callback.value ();
219- }
220- renderer_config_.vulkan = vulkan_renderer_config;
221- context_.SetupSurface (surface_size);
222- #endif
223- }
224-
225106void EmbedderConfigBuilder::SetAssetsPath () {
226107 project_args_.assets_path = context_.GetAssetsPath ().c_str ();
227108}
@@ -406,18 +287,7 @@ FlutterCompositor& EmbedderConfigBuilder::GetCompositor() {
406287void EmbedderConfigBuilder::SetRenderTargetType (
407288 EmbedderTestBackingStoreProducer::RenderTargetType type,
408289 FlutterSoftwarePixelFormat software_pixfmt) {
409- auto & compositor = context_.GetCompositor ();
410-
411- auto producer = std::make_unique<EmbedderTestBackingStoreProducer>(
412- compositor.GetGrContext (), type, software_pixfmt);
413-
414- #ifdef SHELL_ENABLE_GL
415- producer->SetEGLContext (context_.egl_context_ );
416- #endif
417-
418- // TODO(wrightgeorge): figure out a better way of plumbing through the
419- // GrDirectContext
420- compositor.SetBackingStoreProducer (std::move (producer));
290+ context_.SetRenderTargetType (type, software_pixfmt);
421291}
422292
423293UniqueEngine EmbedderConfigBuilder::LaunchEngine () const {
@@ -479,93 +349,52 @@ UniqueEngine EmbedderConfigBuilder::SetupEngine(bool run) const {
479349 return UniqueEngine{engine};
480350}
481351
482- #ifdef SHELL_ENABLE_METAL
352+ #ifndef SHELL_ENABLE_GL
353+ // OpenGL fallback implementations.
354+ // See: flutter/shell/platform/embedder/tests/embedder_config_builder_gl.cc.
483355
484- void EmbedderConfigBuilder::InitializeMetalRendererConfig () {
485- if (context_.GetContextType () != EmbedderTestContextType::kMetalContext ) {
486- return ;
487- }
356+ void EmbedderConfigBuilder::InitializeGLRendererConfig () {
357+ // no-op.
358+ }
488359
489- metal_renderer_config_.struct_size = sizeof (metal_renderer_config_);
490- EmbedderTestContextMetal& metal_context =
491- reinterpret_cast <EmbedderTestContextMetal&>(context_);
492-
493- metal_renderer_config_.device =
494- metal_context.GetTestMetalContext ()->GetMetalDevice ();
495- metal_renderer_config_.present_command_queue =
496- metal_context.GetTestMetalContext ()->GetMetalCommandQueue ();
497- metal_renderer_config_.get_next_drawable_callback =
498- [](void * user_data, const FlutterFrameInfo* frame_info) {
499- return reinterpret_cast <EmbedderTestContextMetal*>(user_data)
500- ->GetNextDrawable (frame_info);
501- };
502- metal_renderer_config_.present_drawable_callback =
503- [](void * user_data, const FlutterMetalTexture* texture) -> bool {
504- EmbedderTestContextMetal* metal_context =
505- reinterpret_cast <EmbedderTestContextMetal*>(user_data);
506- return metal_context->Present (texture->texture_id );
507- };
508- metal_renderer_config_.external_texture_frame_callback =
509- [](void * user_data, int64_t texture_id, size_t width, size_t height,
510- FlutterMetalExternalTexture* texture_out) -> bool {
511- EmbedderTestContextMetal* metal_context =
512- reinterpret_cast <EmbedderTestContextMetal*>(user_data);
513- return metal_context->PopulateExternalTexture (texture_id, width, height,
514- texture_out);
515- };
360+ void EmbedderConfigBuilder::SetOpenGLFBOCallBack () {
361+ FML_LOG (FATAL) << " OpenGL is not enabled in this build." ;
516362}
517363
518- #endif // SHELL_ENABLE_METAL
364+ void EmbedderConfigBuilder::SetOpenGLPresentCallBack () {
365+ FML_LOG (FATAL) << " OpenGL is not enabled in this build." ;
366+ }
519367
520- #ifdef SHELL_ENABLE_VULKAN
368+ void EmbedderConfigBuilder::SetOpenGLRendererConfig (SkISize surface_size) {
369+ FML_LOG (FATAL) << " OpenGL is not enabled in this build." ;
370+ }
371+ #endif
372+ #ifndef SHELL_ENABLE_METAL
373+ // Metal fallback implementations.
374+ // See: flutter/shell/platform/embedder/tests/embedder_config_builder_metal.mm.
521375
522- void EmbedderConfigBuilder::InitializeVulkanRendererConfig () {
523- if (context_.GetContextType () != EmbedderTestContextType::kVulkanContext ) {
524- return ;
525- }
376+ void EmbedderConfigBuilder::InitializeMetalRendererConfig () {
377+ // no-op.
378+ }
526379
527- vulkan_renderer_config_.struct_size = sizeof (FlutterVulkanRendererConfig);
528- vulkan_renderer_config_.version =
529- static_cast <EmbedderTestContextVulkan&>(context_)
530- .vulkan_context_ ->application_ ->GetAPIVersion ();
531- vulkan_renderer_config_.instance =
532- static_cast <EmbedderTestContextVulkan&>(context_)
533- .vulkan_context_ ->application_ ->GetInstance ();
534- vulkan_renderer_config_.physical_device =
535- static_cast <EmbedderTestContextVulkan&>(context_)
536- .vulkan_context_ ->device_ ->GetPhysicalDeviceHandle ();
537- vulkan_renderer_config_.device =
538- static_cast <EmbedderTestContextVulkan&>(context_)
539- .vulkan_context_ ->device_ ->GetHandle ();
540- vulkan_renderer_config_.queue_family_index =
541- static_cast <EmbedderTestContextVulkan&>(context_)
542- .vulkan_context_ ->device_ ->GetGraphicsQueueIndex ();
543- vulkan_renderer_config_.queue =
544- static_cast <EmbedderTestContextVulkan&>(context_)
545- .vulkan_context_ ->device_ ->GetQueueHandle ();
546- vulkan_renderer_config_.get_instance_proc_address_callback =
547- EmbedderTestContextVulkan::InstanceProcAddr;
548- vulkan_renderer_config_.get_next_image_callback =
549- [](void * context,
550- const FlutterFrameInfo* frame_info) -> FlutterVulkanImage {
551- VkImage image =
552- reinterpret_cast <EmbedderTestContextVulkan*>(context)->GetNextImage (
553- {static_cast <int >(frame_info->size .width ),
554- static_cast <int >(frame_info->size .height )});
555- return {
556- .struct_size = sizeof (FlutterVulkanImage),
557- .image = reinterpret_cast <uint64_t >(image),
558- .format = VK_FORMAT_R8G8B8A8_UNORM,
559- };
560- };
561- vulkan_renderer_config_.present_image_callback =
562- [](void * context, const FlutterVulkanImage* image) -> bool {
563- return reinterpret_cast <EmbedderTestContextVulkan*>(context)->PresentImage (
564- reinterpret_cast <VkImage>(image->image ));
565- };
380+ void EmbedderConfigBuilder::SetMetalRendererConfig (SkISize surface_size) {
381+ FML_LOG (FATAL) << " Metal is not enabled in this build." ;
382+ }
383+ #endif
384+ #ifndef SHELL_ENABLE_VULKAN
385+ // Vulkan fallback implementations.
386+ // See: flutter/shell/platform/embedder/tests/embedder_config_builder_vulkan.cc.
387+
388+ void EmbedderConfigBuilder::InitializeVulkanRendererConfig () {
389+ // no-op.
566390}
567391
392+ void EmbedderConfigBuilder::SetVulkanRendererConfig (
393+ SkISize surface_size,
394+ std::optional<FlutterVulkanInstanceProcAddressCallback>
395+ instance_proc_address_callback) {
396+ FML_LOG (FATAL) << " Vulkan is not enabled in this build." ;
397+ }
568398#endif
569399
570- } // namespace testing
571- } // namespace flutter
400+ } // namespace flutter::testing
0 commit comments