mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[Impeller] desktop: Add missing dispatch for TextFrameDispatcher in embedder view. (flutter/engine#55197)
This commit is contained in:
parent
8706638baf
commit
07fce2f8f4
@ -242,7 +242,8 @@ test_fixtures("fixtures") {
|
||||
"fixtures/dpr_noxform.png",
|
||||
"fixtures/dpr_xform.png",
|
||||
"fixtures/gradient.png",
|
||||
"fixtures/impeller_gl_test.png",
|
||||
"fixtures/impeller_test.png",
|
||||
"fixtures/impeller_text_test.png",
|
||||
"fixtures/vk_dpr_noxform.png",
|
||||
"fixtures/vk_gradient.png",
|
||||
"fixtures/gradient_metal.png",
|
||||
|
||||
@ -137,6 +137,7 @@ bool EmbedderExternalView::Render(const EmbedderRenderTarget& render_target,
|
||||
|
||||
impeller::TextFrameDispatcher collector(aiks_context->GetContentContext(),
|
||||
impeller::Matrix());
|
||||
display_list->Dispatch(collector, sk_cull_rect);
|
||||
|
||||
impeller::ExperimentalDlDispatcher impeller_dispatcher(
|
||||
aiks_context->GetContentContext(), *impeller_target,
|
||||
|
||||
@ -71,9 +71,9 @@ $ $ENGINE/out/$TARGET/embedder_unittests --gtest_filter="EmbedderTest.VerifyB143
|
||||
# Or, a suite of tests:
|
||||
$ $ENGINE/out/$TARGET/embedder_unittests --gtest_filter="EmbedderTest.*"
|
||||
|
||||
# 3. Now, copy the output to the golden file:
|
||||
# 3. Now, copy the output to the golden file (notice the "actual_" prefix):
|
||||
$ cp \
|
||||
$ENGINE/out/$TARGET/gen/flutter/shell/platform/embedder/assets/expectation_verifyb143464703_soft_noxform.png \
|
||||
$ENGINE/out/$TARGET/gen/flutter/shell/platform/embedder/assets/actual_verifyb143464703_soft_noxform.png \
|
||||
$ENGINE/flutter/shell/platform/embedder/fixtures/verifyb143464703_soft_noxform.png
|
||||
```
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
@ -1553,7 +1553,7 @@ void render_gradient_retained() {
|
||||
|
||||
@pragma('vm:entry-point')
|
||||
// ignore: non_constant_identifier_names
|
||||
void render_impeller_gl_test() {
|
||||
void render_impeller_test() {
|
||||
PlatformDispatcher.instance.onBeginFrame = (Duration duration) {
|
||||
final SceneBuilder builder = SceneBuilder();
|
||||
builder.pushOffset(0.0, 0.0);
|
||||
@ -1569,3 +1569,29 @@ void render_impeller_gl_test() {
|
||||
};
|
||||
PlatformDispatcher.instance.scheduleFrame();
|
||||
}
|
||||
|
||||
@pragma('vm:entry-point')
|
||||
// ignore: non_constant_identifier_names
|
||||
void render_impeller_text_test() {
|
||||
PlatformDispatcher.instance.onBeginFrame = (Duration duration) {
|
||||
final SceneBuilder builder = SceneBuilder();
|
||||
builder.pushOffset(0.0, 0.0);
|
||||
final Paint paint = Paint();
|
||||
paint.color = const Color.fromARGB(255, 0, 0, 255);
|
||||
final PictureRecorder baseRecorder = PictureRecorder();
|
||||
final Canvas canvas = Canvas(baseRecorder);
|
||||
|
||||
final ParagraphBuilder paragraphBuilder = ParagraphBuilder(ParagraphStyle(
|
||||
fontFamily: 'sans-serif'
|
||||
))
|
||||
..addText('Flutter is the best!');
|
||||
final Paragraph paragraph = paragraphBuilder.build()
|
||||
..layout(const ParagraphConstraints(width: 400));
|
||||
canvas.drawParagraph(paragraph, const Offset(20, 20));
|
||||
|
||||
builder.addPicture(Offset.zero, baseRecorder.endRecording());
|
||||
builder.pop();
|
||||
PlatformDispatcher.instance.views.first.render(builder.build());
|
||||
};
|
||||
PlatformDispatcher.instance.scheduleFrame();
|
||||
}
|
||||
|
||||
@ -4758,7 +4758,7 @@ TEST_F(EmbedderTest, CanRenderWithImpellerOpenGL) {
|
||||
});
|
||||
|
||||
builder.AddCommandLineArgument("--enable-impeller");
|
||||
builder.SetDartEntrypoint("render_impeller_gl_test");
|
||||
builder.SetDartEntrypoint("render_impeller_test");
|
||||
builder.SetOpenGLRendererConfig(SkISize::Make(800, 600));
|
||||
builder.SetCompositor();
|
||||
builder.SetRenderTargetType(
|
||||
@ -4798,7 +4798,7 @@ TEST_F(EmbedderTest, CanRenderWithImpellerOpenGL) {
|
||||
|
||||
ASSERT_TRUE(ImageMatchesFixture(
|
||||
FixtureNameForBackend(EmbedderTestContextType::kOpenGLContext,
|
||||
"impeller_gl_test.png"),
|
||||
"impeller_test.png"),
|
||||
rendered_scene));
|
||||
|
||||
// The scene will be rendered by the compositor, and the surface present
|
||||
|
||||
@ -614,6 +614,84 @@ TEST_F(EmbedderTest, ExternalTextureMetalRefreshedTooOften) {
|
||||
EXPECT_TRUE(resolve_called);
|
||||
}
|
||||
|
||||
TEST_F(EmbedderTest, CanRenderWithImpellerMetal) {
|
||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
||||
|
||||
EmbedderConfigBuilder builder(context);
|
||||
|
||||
builder.AddCommandLineArgument("--enable-impeller");
|
||||
builder.SetDartEntrypoint("render_impeller_test");
|
||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
||||
|
||||
auto rendered_scene = context.GetNextSceneImage();
|
||||
|
||||
auto engine = builder.LaunchEngine();
|
||||
ASSERT_TRUE(engine.is_valid());
|
||||
|
||||
// Send a window metrics events so frames may be scheduled.
|
||||
FlutterWindowMetricsEvent event = {};
|
||||
event.struct_size = sizeof(event);
|
||||
event.width = 800;
|
||||
event.height = 600;
|
||||
event.pixel_ratio = 1.0;
|
||||
ASSERT_EQ(FlutterEngineSendWindowMetricsEvent(engine.get(), &event), kSuccess);
|
||||
|
||||
ASSERT_TRUE(ImageMatchesFixture("impeller_test.png", rendered_scene));
|
||||
}
|
||||
|
||||
TEST_F(EmbedderTest, CanRenderTextWithImpellerMetal) {
|
||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
||||
|
||||
EmbedderConfigBuilder builder(context);
|
||||
|
||||
builder.AddCommandLineArgument("--enable-impeller");
|
||||
builder.SetDartEntrypoint("render_impeller_text_test");
|
||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
||||
|
||||
auto rendered_scene = context.GetNextSceneImage();
|
||||
|
||||
auto engine = builder.LaunchEngine();
|
||||
ASSERT_TRUE(engine.is_valid());
|
||||
|
||||
// Send a window metrics events so frames may be scheduled.
|
||||
FlutterWindowMetricsEvent event = {};
|
||||
event.struct_size = sizeof(event);
|
||||
event.width = 800;
|
||||
event.height = 600;
|
||||
event.pixel_ratio = 1.0;
|
||||
ASSERT_EQ(FlutterEngineSendWindowMetricsEvent(engine.get(), &event), kSuccess);
|
||||
|
||||
ASSERT_TRUE(ImageMatchesFixture("impeller_text_test.png", rendered_scene));
|
||||
}
|
||||
|
||||
TEST_F(EmbedderTest, CanRenderTextWithImpellerAndCompositorMetal) {
|
||||
auto& context = GetEmbedderContext(EmbedderTestContextType::kMetalContext);
|
||||
|
||||
EmbedderConfigBuilder builder(context);
|
||||
|
||||
builder.AddCommandLineArgument("--enable-impeller");
|
||||
builder.SetDartEntrypoint("render_impeller_text_test");
|
||||
builder.SetMetalRendererConfig(SkISize::Make(800, 600));
|
||||
builder.SetCompositor();
|
||||
|
||||
builder.SetRenderTargetType(EmbedderTestBackingStoreProducer::RenderTargetType::kMetalTexture);
|
||||
|
||||
auto rendered_scene = context.GetNextSceneImage();
|
||||
|
||||
auto engine = builder.LaunchEngine();
|
||||
ASSERT_TRUE(engine.is_valid());
|
||||
|
||||
// Send a window metrics events so frames may be scheduled.
|
||||
FlutterWindowMetricsEvent event = {};
|
||||
event.struct_size = sizeof(event);
|
||||
event.width = 800;
|
||||
event.height = 600;
|
||||
event.pixel_ratio = 1.0;
|
||||
ASSERT_EQ(FlutterEngineSendWindowMetricsEvent(engine.get(), &event), kSuccess);
|
||||
|
||||
ASSERT_TRUE(ImageMatchesFixture("impeller_text_test.png", rendered_scene));
|
||||
}
|
||||
|
||||
} // namespace testing
|
||||
} // namespace flutter
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user