From 55da4fb37dfc2bfc0766941e9150d2b3dc949170 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Wed, 21 Feb 2024 10:37:21 -0800 Subject: [PATCH] Make the GL context current in EmbedderSurfaceGLImpeller before creating the GPU surface (flutter/engine#50807) The GPUSurfaceGLImpeller ctor creates an AiksContext/ContentContext, which loads the shader pipelines. If the current thread does not have a GL context and can not execute ReactorGLES operations, then the pipeline futures will not complete. This can cause the raster thread to hang if the reactor has not run and the futures are still incomplete when a rendering task later needs to obtain the pipeline. --- .../flutter/shell/platform/embedder/BUILD.gn | 2 +- .../embedder/embedder_surface_gl_impeller.cc | 5 +++++ .../fixtures/impeller_gl_gradient.png | Bin 37220 -> 0 bytes .../embedder/fixtures/impeller_gl_test.png | Bin 0 -> 3274 bytes .../platform/embedder/fixtures/main.dart | 18 ++++++++++++++++++ .../embedder/tests/embedder_gl_unittests.cc | 4 ++-- 6 files changed, 26 insertions(+), 3 deletions(-) delete mode 100644 engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_gradient.png create mode 100644 engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_test.png diff --git a/engine/src/flutter/shell/platform/embedder/BUILD.gn b/engine/src/flutter/shell/platform/embedder/BUILD.gn index b83364b8b09..e4754f1d554 100644 --- a/engine/src/flutter/shell/platform/embedder/BUILD.gn +++ b/engine/src/flutter/shell/platform/embedder/BUILD.gn @@ -242,7 +242,7 @@ test_fixtures("fixtures") { "fixtures/dpr_noxform.png", "fixtures/dpr_xform.png", "fixtures/gradient.png", - "fixtures/impeller_gl_gradient.png", + "fixtures/impeller_gl_test.png", "fixtures/vk_dpr_noxform.png", "fixtures/vk_gradient.png", "fixtures/gradient_metal.png", diff --git a/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc b/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc index cae8037083c..c7efa86de81 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc +++ b/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc @@ -178,6 +178,11 @@ EmbedderSurfaceGLImpeller::GLContextFramebufferInfo() const { // |EmbedderSurface| std::unique_ptr EmbedderSurfaceGLImpeller::CreateGPUSurface() { + // Ensure that the GL context is current before creating the GPU surface. + // GPUSurfaceGLImpeller initialization will set up shader pipelines, and the + // current thread needs to be able to execute reactor operations. + GLContextMakeCurrent(); + return std::make_unique( this, // GPU surface GL delegate impeller_context_, // Impeller context diff --git a/engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_gradient.png b/engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_gradient.png deleted file mode 100644 index 76fd5b12f1f122de5e771763d7c0af67af28837d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37220 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 X&b2mt>E!@mhl0V=)z4*}Q$iB}l!?6L literal 0 HcmV?d00001 diff --git a/engine/src/flutter/shell/platform/embedder/fixtures/main.dart b/engine/src/flutter/shell/platform/embedder/fixtures/main.dart index 35194f5fdcb..dffa430fbb5 100644 --- a/engine/src/flutter/shell/platform/embedder/fixtures/main.dart +++ b/engine/src/flutter/shell/platform/embedder/fixtures/main.dart @@ -1364,3 +1364,21 @@ void render_gradient_retained() { }; PlatformDispatcher.instance.scheduleFrame(); } + +@pragma('vm:entry-point') +void render_impeller_gl_test() { + PlatformDispatcher.instance.onBeginFrame = (Duration duration) { + final SceneBuilder builder = SceneBuilder(); + builder.pushOffset(0.0, 0.0); + final Paint paint = Paint(); + paint.color = Color.fromARGB(255, 0, 0, 255); + final PictureRecorder baseRecorder = PictureRecorder(); + final Canvas canvas = Canvas(baseRecorder); + canvas.drawPaint(Paint()..color = Color.fromARGB(255, 255, 0, 0)); + canvas.drawRect(Rect.fromLTRB(20.0, 20.0, 200.0, 150.0), paint); + builder.addPicture(Offset.zero, baseRecorder.endRecording()); + builder.pop(); + PlatformDispatcher.instance.views.first.render(builder.build()); + }; + PlatformDispatcher.instance.scheduleFrame(); +} diff --git a/engine/src/flutter/shell/platform/embedder/tests/embedder_gl_unittests.cc b/engine/src/flutter/shell/platform/embedder/tests/embedder_gl_unittests.cc index a050e70f8f2..f62985df359 100644 --- a/engine/src/flutter/shell/platform/embedder/tests/embedder_gl_unittests.cc +++ b/engine/src/flutter/shell/platform/embedder/tests/embedder_gl_unittests.cc @@ -4711,7 +4711,7 @@ TEST_F(EmbedderTest, CanRenderWithImpellerOpenGL) { }); builder.AddCommandLineArgument("--enable-impeller"); - builder.SetDartEntrypoint("render_gradient"); + builder.SetDartEntrypoint("render_impeller_gl_test"); builder.SetOpenGLRendererConfig(SkISize::Make(800, 600)); builder.SetCompositor(); builder.SetRenderTargetType( @@ -4733,7 +4733,7 @@ TEST_F(EmbedderTest, CanRenderWithImpellerOpenGL) { ASSERT_TRUE(ImageMatchesFixture( FixtureNameForBackend(EmbedderTestContextType::kOpenGLContext, - "impeller_gl_gradient.png"), + "impeller_gl_test.png"), rendered_scene)); // The scene will be rendered by the compositor, and the surface present