diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_config_builder.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_config_builder.cc index ef1a59f31d..abba1302ff 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_config_builder.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_config_builder.cc @@ -287,7 +287,7 @@ FlutterCompositor& EmbedderConfigBuilder::GetCompositor() { void EmbedderConfigBuilder::SetRenderTargetType( EmbedderTestBackingStoreProducer::RenderTargetType type, FlutterSoftwarePixelFormat software_pixfmt) { - context_.SetRenderTargetType(type, software_pixfmt); + context_.GetCompositor().SetRenderTargetType(type, software_pixfmt); } UniqueEngine EmbedderConfigBuilder::LaunchEngine() const { diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.cc index 66f6d55af0..38b5a6358d 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.cc @@ -51,11 +51,6 @@ bool EmbedderTestCompositor::CollectBackingStore( return true; } -void EmbedderTestCompositor::SetBackingStoreProducer( - std::unique_ptr backingstore_producer) { - backingstore_producer_ = std::move(backingstore_producer); -} - sk_sp EmbedderTestCompositor::GetLastComposition() { return last_composition_; } diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.h b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.h index 04da775977..4e0b0f1646 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.h +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor.h @@ -29,8 +29,9 @@ class EmbedderTestCompositor { virtual ~EmbedderTestCompositor(); - void SetBackingStoreProducer( - std::unique_ptr backingstore_producer); + virtual void SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) = 0; bool CreateBackingStore(const FlutterBackingStoreConfig* config, FlutterBackingStore* backing_store_out); diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.cc index 29daf8da59..8727317a90 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.cc @@ -15,12 +15,37 @@ namespace flutter { namespace testing { EmbedderTestCompositorGL::EmbedderTestCompositorGL( + std::shared_ptr egl_context, SkISize surface_size, sk_sp context) - : EmbedderTestCompositor(surface_size, std::move(context)) {} + : EmbedderTestCompositor(surface_size, std::move(context)), + egl_context_(std::move(egl_context)) {} EmbedderTestCompositorGL::~EmbedderTestCompositorGL() = default; +void EmbedderTestCompositorGL::SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) { + switch (type) { + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture: + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2: + // no-op: Rendering into GL and software render targets is supported. + break; + case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture: + case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage: + FML_LOG(FATAL) << "Unsupported render target type: " + << static_cast(type); + break; + } + auto producer = std::make_unique( + context_, type, software_pixfmt); + producer->SetEGLContext(egl_context_); + backingstore_producer_ = std::move(producer); +} + bool EmbedderTestCompositorGL::UpdateOffscrenComposition( const FlutterLayer** layers, size_t layers_count) { diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h index 507760d5ac..2569b910e4 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_gl.h @@ -5,21 +5,30 @@ #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_TESTS_EMBEDDER_TEST_COMPOSITOR_GL_H_ #define FLUTTER_SHELL_PLATFORM_EMBEDDER_TESTS_EMBEDDER_TEST_COMPOSITOR_GL_H_ +#include + #include "flutter/fml/macros.h" #include "flutter/shell/platform/embedder/embedder.h" #include "flutter/shell/platform/embedder/tests/embedder_test_compositor.h" +#include "flutter/testing/test_gl_surface.h" namespace flutter { namespace testing { class EmbedderTestCompositorGL : public EmbedderTestCompositor { public: - EmbedderTestCompositorGL(SkISize surface_size, + EmbedderTestCompositorGL(std::shared_ptr egl_context, + SkISize surface_size, sk_sp context); ~EmbedderTestCompositorGL() override; + void SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) override; + private: + std::shared_ptr egl_context_; bool UpdateOffscrenComposition(const FlutterLayer** layers, size_t layers_count) override; diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.h b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.h index bbe56272b5..4bd134ac3b 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.h +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.h @@ -19,6 +19,10 @@ class EmbedderTestCompositorMetal : public EmbedderTestCompositor { ~EmbedderTestCompositorMetal() override; + void SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) override; + private: bool UpdateOffscrenComposition(const FlutterLayer** layers, size_t layers_count) override; diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.mm b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.mm index 45eb857567..bdf1b59492 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.mm +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_metal.mm @@ -20,6 +20,26 @@ EmbedderTestCompositorMetal::EmbedderTestCompositorMetal(SkISize surface_size, EmbedderTestCompositorMetal::~EmbedderTestCompositorMetal() = default; +void EmbedderTestCompositorMetal::SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) { + switch (type) { + case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture: + // no-op. + break; + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture: + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2: + case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage: + FML_LOG(FATAL) << "Unsupported render target type: " << static_cast(type); + break; + } + backingstore_producer_ = + std::make_unique(context_, type, software_pixfmt); +} + bool EmbedderTestCompositorMetal::UpdateOffscrenComposition(const FlutterLayer** layers, size_t layers_count) { last_composition_ = nullptr; diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.cc index 46938205e2..08e2770395 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.cc @@ -17,6 +17,27 @@ EmbedderTestCompositorSoftware::EmbedderTestCompositorSoftware( EmbedderTestCompositorSoftware::~EmbedderTestCompositorSoftware() = default; +void EmbedderTestCompositorSoftware::SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) { + switch (type) { + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2: + // no-op. + break; + case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture: + case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage: + FML_LOG(FATAL) << "Unsupported render target type: " + << static_cast(type); + break; + } + backingstore_producer_ = std::make_unique( + context_, type, software_pixfmt); +} + bool EmbedderTestCompositorSoftware::UpdateOffscrenComposition( const FlutterLayer** layers, size_t layers_count) { diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.h b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.h index ffd007fff0..d076d29106 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.h +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_software.h @@ -16,6 +16,10 @@ class EmbedderTestCompositorSoftware : public EmbedderTestCompositor { ~EmbedderTestCompositorSoftware() override; + void SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) override; + private: bool UpdateOffscrenComposition(const FlutterLayer** layers, size_t layers_count); diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.cc index 18a0fafabd..3477a223c2 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.cc @@ -22,6 +22,27 @@ EmbedderTestCompositorVulkan::EmbedderTestCompositorVulkan( EmbedderTestCompositorVulkan::~EmbedderTestCompositorVulkan() = default; +void EmbedderTestCompositorVulkan::SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) { + switch (type) { + case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage: + // no-op. + break; + case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface: + case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture: + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer: + case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2: + FML_LOG(FATAL) << "Unsupported render target type: " + << static_cast(type); + break; + } + backingstore_producer_ = std::make_unique( + context_, type, software_pixfmt); +} + bool EmbedderTestCompositorVulkan::UpdateOffscrenComposition( const FlutterLayer** layers, size_t layers_count) { diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.h b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.h index 608bda52ec..46d54fe728 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.h +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_compositor_vulkan.h @@ -19,6 +19,10 @@ class EmbedderTestCompositorVulkan : public EmbedderTestCompositor { ~EmbedderTestCompositorVulkan() override; + void SetRenderTargetType( + EmbedderTestBackingStoreProducer::RenderTargetType type, + FlutterSoftwarePixelFormat software_pixfmt) override; + private: bool UpdateOffscrenComposition(const FlutterLayer** layers, size_t layers_count) override; diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context.cc index d53491ee29..0f5e3dcf9a 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context.cc @@ -96,32 +96,6 @@ void EmbedderTestContext::SetRootSurfaceTransformation(SkMatrix matrix) { root_surface_transformation_ = matrix; } -void EmbedderTestContext::SetRenderTargetType( - EmbedderTestBackingStoreProducer::RenderTargetType type, - FlutterSoftwarePixelFormat software_pixfmt) { - // TODO(wrightgeorge): figure out a better way of plumbing through the - // GrDirectContext - auto& compositor = GetCompositor(); - auto producer = std::make_unique( - compositor.GetGrContext(), type, software_pixfmt); -#ifdef SHELL_ENABLE_GL - switch (type) { - case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer: - case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture: - case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface: - producer->SetEGLContext(egl_context_); - break; - case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer: - case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2: - case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture: - case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage: - // no-op. - break; - } -#endif // SHELL_ENABLE_GL - compositor.SetBackingStoreProducer(std::move(producer)); -} - void EmbedderTestContext::AddIsolateCreateCallback( const fml::closure& closure) { if (closure) { diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context_gl.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context_gl.cc index ac916ead94..e562411841 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context_gl.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_test_context_gl.cc @@ -140,7 +140,7 @@ void EmbedderTestContextGL::SetupCompositor() { FML_CHECK(gl_surface_) << "Set up the GL surface before setting up a compositor."; compositor_ = std::make_unique( - gl_surface_->GetSurfaceSize(), gl_surface_->GetGrContext()); + egl_context_, gl_surface_->GetSurfaceSize(), gl_surface_->GetGrContext()); GLClearCurrent(); }