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

Make the GL context current in EmbedderSurfaceGLImpeller before creating the GPU surface #50807

Merged

Conversation

jason-simmons
Copy link
Member

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.

@@ -1364,3 +1364,21 @@ void render_gradient_retained() {
};
PlatformDispatcher.instance.scheduleFrame();
}

@pragma('vm:entry-point')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does this test do differently than the entrypoint you're replacing?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test executes a series of canvas draw calls that makes the EntityPass render a Contents that needs to obtain a Pipeline before the ReactorGLES is flushed.

Without this patch, the test hangs when SolidColorContents::Render tries to get its shader pipeline.

Copy link
Member

@jonahwilliams jonahwilliams left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with nit

…ing the GPU surface

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.
@jason-simmons jason-simmons force-pushed the embed_iplr_gl_context_gpu_surface branch from 26d2a40 to 41d39f7 Compare February 21, 2024 02:23
@jason-simmons jason-simmons added the autosubmit Merge PR when tree becomes green via auto submit App label Feb 21, 2024
@auto-submit auto-submit bot merged commit f7ac96d into flutter:main Feb 21, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Feb 21, 2024
auto-submit bot pushed a commit to flutter/flutter that referenced this pull request Feb 21, 2024
…143875)

flutter/engine@52ffcaa...bf5c003

2024-02-21 skia-flutter-autoroll@skia.org Roll Skia from 9d86359b5fe8 to 8fa858855820 (15 revisions) (flutter/engine#50827)
2024-02-21 matanlurey@users.noreply.github.com Add the `scenario_app` `'solid_blue'` golden to the Android test suite (flutter/engine#50801)
2024-02-21 matanlurey@users.noreply.github.com Ignore EOF newline characters and added tests to `dir_contents_diff` tool (flutter/engine#50805)
2024-02-21 jason-simmons@users.noreply.github.com Make the GL context current in EmbedderSurfaceGLImpeller before creating the GPU surface (flutter/engine#50807)
2024-02-21 matanlurey@users.noreply.github.com Fail engine post-submit on skia-gold comparions. (flutter/engine#50826)
2024-02-21 34871572+gmackall@users.noreply.github.com Remove WindowManager reflection in SingleViewPresentation.java (flutter/engine#49996)
2024-02-21 30870216+gaaclarke@users.noreply.github.com [Impeller] applied the lerp hack to blur (roughly 2x speedup?) (flutter/engine#50790)
2024-02-21 jason-simmons@users.noreply.github.com Migrate the Fuchsia embedder to the Dart_RecordTimelineEvent API (flutter/engine#50823)
2024-02-21 john@johnmccutchan.com Hook ImageReaderSurfaceProducer to the onTrimMemory listener interface (flutter/engine#50792)
2024-02-21 matanlurey@users.noreply.github.com Fix the local-only lint errors due to an unexpected `GeneratedPluginRegistrant.java` (flutter/engine#50795)
2024-02-21 jonahwilliams@google.com [Impeller] cache onscreen render targets. (flutter/engine#50751)
2024-02-21 zanderso@users.noreply.github.com Use 'et format' in CI. Check formatting of all files in CI (flutter/engine#50810)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC jimgraham@google.com,rmistry@google.com,zra@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
autosubmit Merge PR when tree becomes green via auto submit App
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants