Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit fc80c88

Browse files
committed
Move SetRenderTargetType to EmbedderTestCompositor
SetRenderTargetType is used to configure the backingstore producer on the compositor, but the backingstore types available to any given compositor are limited to the specific graphics backend in use: Software, GL, Metal, or Vulkan. This moves SetRenderTargetType to EmbedderTestCompositor and its subclasses and adds RenderTargetType validation. A follow-up patch will refactor EmbedderTestBackingStoreProducer into backend-specific subclasses. For OpenGL backingstore producers, the egl_context_ from EmbedderTestContext (which is actually set in the EmbedderTestContextGL subclass and should live there, but that's a separate cleanup) is required in SetRenderTargetType, so we now inject it into EmbedderTestCompositor in the constructor so it's available when needed.
1 parent 5f8e6e4 commit fc80c88

13 files changed

+117
-40
lines changed

shell/platform/embedder/tests/embedder_config_builder.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ FlutterCompositor& EmbedderConfigBuilder::GetCompositor() {
287287
void EmbedderConfigBuilder::SetRenderTargetType(
288288
EmbedderTestBackingStoreProducer::RenderTargetType type,
289289
FlutterSoftwarePixelFormat software_pixfmt) {
290-
context_.SetRenderTargetType(type, software_pixfmt);
290+
context_.GetCompositor().SetRenderTargetType(type, software_pixfmt);
291291
}
292292

293293
UniqueEngine EmbedderConfigBuilder::LaunchEngine() const {

shell/platform/embedder/tests/embedder_test_compositor.cc

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,6 @@ bool EmbedderTestCompositor::CollectBackingStore(
5151
return true;
5252
}
5353

54-
void EmbedderTestCompositor::SetBackingStoreProducer(
55-
std::unique_ptr<EmbedderTestBackingStoreProducer> backingstore_producer) {
56-
backingstore_producer_ = std::move(backingstore_producer);
57-
}
58-
5954
sk_sp<SkImage> EmbedderTestCompositor::GetLastComposition() {
6055
return last_composition_;
6156
}

shell/platform/embedder/tests/embedder_test_compositor.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ class EmbedderTestCompositor {
2929

3030
virtual ~EmbedderTestCompositor();
3131

32-
void SetBackingStoreProducer(
33-
std::unique_ptr<EmbedderTestBackingStoreProducer> backingstore_producer);
32+
virtual void SetRenderTargetType(
33+
EmbedderTestBackingStoreProducer::RenderTargetType type,
34+
FlutterSoftwarePixelFormat software_pixfmt) = 0;
3435

3536
bool CreateBackingStore(const FlutterBackingStoreConfig* config,
3637
FlutterBackingStore* backing_store_out);

shell/platform/embedder/tests/embedder_test_compositor_gl.cc

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,37 @@ namespace flutter {
1515
namespace testing {
1616

1717
EmbedderTestCompositorGL::EmbedderTestCompositorGL(
18+
std::shared_ptr<TestEGLContext> egl_context,
1819
SkISize surface_size,
1920
sk_sp<GrDirectContext> context)
20-
: EmbedderTestCompositor(surface_size, std::move(context)) {}
21+
: EmbedderTestCompositor(surface_size, std::move(context)),
22+
egl_context_(egl_context) {}
2123

2224
EmbedderTestCompositorGL::~EmbedderTestCompositorGL() = default;
2325

26+
void EmbedderTestCompositor::SetRenderTargetType(
27+
EmbedderTestBackingStoreProducer::RenderTargetType type,
28+
FlutterSoftwarePixelFormat software_pixfmt) {
29+
switch (type) {
30+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer:
31+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface:
32+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture:
33+
// no-op.
34+
break;
35+
case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture:
36+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer:
37+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2:
38+
case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage:
39+
FML_LOG(FATAL) << "Unsupported render target type: "
40+
<< static_cast<int>(type);
41+
break;
42+
}
43+
auto producer = std::make_unique<EmbedderTestBackingStoreProducer>(
44+
context_, type, software_pixfmt);
45+
producer->SetEGLContext(egl_context_);
46+
backingstore_producer_ = std::move(producer);
47+
}
48+
2449
bool EmbedderTestCompositorGL::UpdateOffscrenComposition(
2550
const FlutterLayer** layers,
2651
size_t layers_count) {

shell/platform/embedder/tests/embedder_test_compositor_gl.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,30 @@
55
#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_TESTS_EMBEDDER_TEST_COMPOSITOR_GL_H_
66
#define FLUTTER_SHELL_PLATFORM_EMBEDDER_TESTS_EMBEDDER_TEST_COMPOSITOR_GL_H_
77

8+
#include <memory>
9+
810
#include "flutter/fml/macros.h"
911
#include "flutter/shell/platform/embedder/embedder.h"
1012
#include "flutter/shell/platform/embedder/tests/embedder_test_compositor.h"
13+
#include "flutter/testing/test_gl_surface.h"
1114

1215
namespace flutter {
1316
namespace testing {
1417

1518
class EmbedderTestCompositorGL : public EmbedderTestCompositor {
1619
public:
17-
EmbedderTestCompositorGL(SkISize surface_size,
20+
EmbedderTestCompositorGL(std::shared_ptr<TestEGLContext> egl_context,
21+
SkISize surface_size,
1822
sk_sp<GrDirectContext> context);
1923

2024
~EmbedderTestCompositorGL() override;
2125

26+
void SetRenderTargetType(
27+
EmbedderTestBackingStoreProducer::RenderTargetType type,
28+
FlutterSoftwarePixelFormat software_pixfmt) override;
29+
2230
private:
31+
std::shared_ptr<TestEGLContext> egl_context_;
2332
bool UpdateOffscrenComposition(const FlutterLayer** layers,
2433
size_t layers_count) override;
2534

shell/platform/embedder/tests/embedder_test_compositor_metal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class EmbedderTestCompositorMetal : public EmbedderTestCompositor {
1919

2020
~EmbedderTestCompositorMetal() override;
2121

22+
void SetRenderTargetType(
23+
EmbedderTestBackingStoreProducer::RenderTargetType type,
24+
FlutterSoftwarePixelFormat software_pixfmt) override;
25+
2226
private:
2327
bool UpdateOffscrenComposition(const FlutterLayer** layers,
2428
size_t layers_count) override;

shell/platform/embedder/tests/embedder_test_compositor_metal.mm

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,26 @@
2020

2121
EmbedderTestCompositorMetal::~EmbedderTestCompositorMetal() = default;
2222

23+
void EmbedderTestCompositorMetal::SetRenderTargetType(
24+
EmbedderTestBackingStoreProducer::RenderTargetType type,
25+
FlutterSoftwarePixelFormat software_pixfmt) {
26+
switch (type) {
27+
case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture:
28+
// no-op.
29+
break;
30+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer:
31+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface:
32+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture:
33+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer:
34+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2:
35+
case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage:
36+
FML_LOG(FATAL) << "Unsupported render target type: " << static_cast<int>(type);
37+
break;
38+
}
39+
backingstore_producer_ =
40+
std::make_unique<EmbedderTestBackingStoreProducer>(context_, type, software_pixfmt);
41+
}
42+
2343
bool EmbedderTestCompositorMetal::UpdateOffscrenComposition(const FlutterLayer** layers,
2444
size_t layers_count) {
2545
last_composition_ = nullptr;

shell/platform/embedder/tests/embedder_test_compositor_software.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,27 @@ EmbedderTestCompositorSoftware::EmbedderTestCompositorSoftware(
1717

1818
EmbedderTestCompositorSoftware::~EmbedderTestCompositorSoftware() = default;
1919

20+
void EmbedderTestCompositorSoftware::SetRenderTargetType(
21+
EmbedderTestBackingStoreProducer::RenderTargetType type,
22+
FlutterSoftwarePixelFormat software_pixfmt) {
23+
switch (type) {
24+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer:
25+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2:
26+
// no-op.
27+
break;
28+
case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture:
29+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer:
30+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface:
31+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture:
32+
case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage:
33+
FML_LOG(FATAL) << "Unsupported render target type: "
34+
<< static_cast<int>(type);
35+
break;
36+
}
37+
backingstore_producer_ = std::make_unique<EmbedderTestBackingStoreProducer>(
38+
context_, type, software_pixfmt);
39+
}
40+
2041
bool EmbedderTestCompositorSoftware::UpdateOffscrenComposition(
2142
const FlutterLayer** layers,
2243
size_t layers_count) {

shell/platform/embedder/tests/embedder_test_compositor_software.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ class EmbedderTestCompositorSoftware : public EmbedderTestCompositor {
1616

1717
~EmbedderTestCompositorSoftware() override;
1818

19+
void SetRenderTargetType(
20+
EmbedderTestBackingStoreProducer::RenderTargetType type,
21+
FlutterSoftwarePixelFormat software_pixfmt) override;
22+
1923
private:
2024
bool UpdateOffscrenComposition(const FlutterLayer** layers,
2125
size_t layers_count);

shell/platform/embedder/tests/embedder_test_compositor_vulkan.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,27 @@ EmbedderTestCompositorVulkan::EmbedderTestCompositorVulkan(
2222

2323
EmbedderTestCompositorVulkan::~EmbedderTestCompositorVulkan() = default;
2424

25+
void EmbedderTestCompositorVulkan::SetRenderTargetType(
26+
EmbedderTestBackingStoreProducer::RenderTargetType type,
27+
FlutterSoftwarePixelFormat software_pixfmt) {
28+
switch (type) {
29+
case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage:
30+
// no-op.
31+
break;
32+
case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture:
33+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer:
34+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface:
35+
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture:
36+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer:
37+
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2:
38+
FML_LOG(FATAL) << "Unsupported render target type: "
39+
<< static_cast<int>(type);
40+
break;
41+
}
42+
backingstore_producer_ = std::make_unique<EmbedderTestBackingStoreProducer>(
43+
context_, type, software_pixfmt);
44+
}
45+
2546
bool EmbedderTestCompositorVulkan::UpdateOffscrenComposition(
2647
const FlutterLayer** layers,
2748
size_t layers_count) {

shell/platform/embedder/tests/embedder_test_compositor_vulkan.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class EmbedderTestCompositorVulkan : public EmbedderTestCompositor {
1919

2020
~EmbedderTestCompositorVulkan() override;
2121

22+
void SetRenderTargetType(
23+
EmbedderTestBackingStoreProducer::RenderTargetType type,
24+
FlutterSoftwarePixelFormat software_pixfmt) override;
25+
2226
private:
2327
bool UpdateOffscrenComposition(const FlutterLayer** layers,
2428
size_t layers_count) override;

shell/platform/embedder/tests/embedder_test_context.cc

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -96,32 +96,6 @@ void EmbedderTestContext::SetRootSurfaceTransformation(SkMatrix matrix) {
9696
root_surface_transformation_ = matrix;
9797
}
9898

99-
void EmbedderTestContext::SetRenderTargetType(
100-
EmbedderTestBackingStoreProducer::RenderTargetType type,
101-
FlutterSoftwarePixelFormat software_pixfmt) {
102-
// TODO(wrightgeorge): figure out a better way of plumbing through the
103-
// GrDirectContext
104-
auto& compositor = GetCompositor();
105-
auto producer = std::make_unique<EmbedderTestBackingStoreProducer>(
106-
compositor.GetGrContext(), type, software_pixfmt);
107-
#ifdef SHELL_ENABLE_GL
108-
switch (type) {
109-
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLFramebuffer:
110-
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture:
111-
case EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface:
112-
producer->SetEGLContext(egl_context_);
113-
break;
114-
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer:
115-
case EmbedderTestBackingStoreProducer::RenderTargetType::kSoftwareBuffer2:
116-
case EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture:
117-
case EmbedderTestBackingStoreProducer::RenderTargetType::kVulkanImage:
118-
// no-op.
119-
break;
120-
}
121-
#endif // SHELL_ENABLE_GL
122-
compositor.SetBackingStoreProducer(std::move(producer));
123-
}
124-
12599
void EmbedderTestContext::AddIsolateCreateCallback(
126100
const fml::closure& closure) {
127101
if (closure) {

shell/platform/embedder/tests/embedder_test_context_gl.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ namespace flutter {
2020
namespace testing {
2121

2222
EmbedderTestContextGL::EmbedderTestContextGL(std::string assets_path)
23-
: EmbedderTestContext(std::move(assets_path)) {
24-
egl_context_ = std::make_shared<TestEGLContext>();
25-
}
23+
: EmbedderTestContext(std::move(assets_path)),
24+
egl_context_ = std::make_shared<TestEGLContext>() {}
2625

2726
EmbedderTestContextGL::~EmbedderTestContextGL() {
2827
SetGLGetFBOCallback(nullptr);
@@ -140,7 +139,7 @@ void EmbedderTestContextGL::SetupCompositor() {
140139
FML_CHECK(gl_surface_)
141140
<< "Set up the GL surface before setting up a compositor.";
142141
compositor_ = std::make_unique<EmbedderTestCompositorGL>(
143-
gl_surface_->GetSurfaceSize(), gl_surface_->GetGrContext());
142+
egl_context_, gl_surface_->GetSurfaceSize(), gl_surface_->GetGrContext());
144143
GLClearCurrent();
145144
}
146145

0 commit comments

Comments
 (0)