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

Commit 6cad98e

Browse files
committed
Add test for OpenGL surface backing store invalid format
1 parent 7cb335d commit 6cad98e

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

shell/platform/embedder/tests/embedder_gl_unittests.cc

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4527,6 +4527,65 @@ TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLFramebuffer) {
45274527
latch.Wait();
45284528
}
45294529

4530+
TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLSurface) {
4531+
auto& context = GetEmbedderContext(EmbedderTestContextType::kOpenGLContext);
4532+
EmbedderConfigBuilder builder(context);
4533+
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
4534+
builder.SetCompositor();
4535+
builder.SetRenderTargetType(
4536+
EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface);
4537+
builder.SetDartEntrypoint("invalid_backingstore");
4538+
4539+
fml::AutoResetWaitableEvent latch;
4540+
4541+
builder.GetCompositor().create_backing_store_callback =
4542+
[](const FlutterBackingStoreConfig* config, //
4543+
FlutterBackingStore* backing_store_out, //
4544+
void* user_data //
4545+
) {
4546+
backing_store_out->type = kFlutterBackingStoreTypeOpenGL;
4547+
backing_store_out->user_data = user_data;
4548+
backing_store_out->open_gl.type = kFlutterOpenGLTargetTypeSurface;
4549+
backing_store_out->open_gl.surface.user_data = user_data;
4550+
// Deliberately set this to an invalid format
4551+
backing_store_out->open_gl.surface.format = 0;
4552+
backing_store_out->open_gl.surface.make_current_callback = [](void*,
4553+
bool*) {
4554+
ADD_FAILURE() << "make_current_callback method should not be called";
4555+
return true;
4556+
};
4557+
backing_store_out->open_gl.surface.clear_current_callback = [](void*,
4558+
bool*) {
4559+
ADD_FAILURE() << "clear_current_callback method should not be called";
4560+
return true;
4561+
};
4562+
backing_store_out->open_gl.surface.destruction_callback =
4563+
[](void* user_data) {
4564+
FAIL() << "destruction_callback method should not be called";
4565+
};
4566+
4567+
return true;
4568+
};
4569+
4570+
context.AddNativeCallback(
4571+
"SignalNativeTest",
4572+
CREATE_NATIVE_ENTRY(
4573+
[&latch](Dart_NativeArguments args) { latch.Signal(); }));
4574+
4575+
auto engine = builder.LaunchEngine();
4576+
4577+
// Send a window metrics events so frames may be scheduled.
4578+
FlutterWindowMetricsEvent event = {};
4579+
event.struct_size = sizeof(event);
4580+
event.width = 800;
4581+
event.height = 600;
4582+
event.pixel_ratio = 1.0;
4583+
ASSERT_EQ(FlutterEngineSendWindowMetricsEvent(engine.get(), &event),
4584+
kSuccess);
4585+
ASSERT_TRUE(engine.is_valid());
4586+
latch.Wait();
4587+
}
4588+
45304589
TEST_F(EmbedderTest, ExternalTextureGLRefreshedTooOften) {
45314590
TestGLSurface surface(SkISize::Make(100, 100));
45324591
auto context = surface.GetGrContext();

0 commit comments

Comments
 (0)