@@ -475,18 +475,69 @@ TEST_F(ShellTest, FrameRasterizedCallbackIsCalled) {
475475#if !defined(OS_FUCHSIA)
476476// TODO(sanjayc77): https://github.com/flutter/flutter/issues/53179. Add
477477// support for raster thread merger for Fuchsia.
478+ TEST_F (ShellTest, ExternalEmbedderNoThreadMerger) {
479+ auto settings = CreateSettingsForFixture ();
480+ fml::AutoResetWaitableEvent endFrameLatch;
481+ bool end_frame_called = false ;
482+ auto end_frame_callback =
483+ [&](bool should_resubmit_frame,
484+ fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) {
485+ ASSERT_TRUE (raster_thread_merger.get () == nullptr );
486+ ASSERT_FALSE (should_resubmit_frame);
487+ end_frame_called = true ;
488+ endFrameLatch.Signal ();
489+ };
490+ auto external_view_embedder = std::make_shared<ShellTestExternalViewEmbedder>(
491+ end_frame_callback, PostPrerollResult::kResubmitFrame , false );
492+ auto shell = CreateShell (std::move (settings), GetTaskRunnersForFixture (),
493+ false , external_view_embedder);
494+
495+ // Create the surface needed by rasterizer
496+ PlatformViewNotifyCreated (shell.get ());
497+
498+ auto configuration = RunConfiguration::InferFromSettings (settings);
499+ configuration.SetEntrypoint (" emptyMain" );
500+
501+ RunEngine (shell.get (), std::move (configuration));
502+
503+ LayerTreeBuilder builder = [&](std::shared_ptr<ContainerLayer> root) {
504+ SkPictureRecorder recorder;
505+ SkCanvas* recording_canvas =
506+ recorder.beginRecording (SkRect::MakeXYWH (0 , 0 , 80 , 80 ));
507+ recording_canvas->drawRect (SkRect::MakeXYWH (0 , 0 , 80 , 80 ),
508+ SkPaint (SkColor4f::FromColor (SK_ColorRED)));
509+ auto sk_picture = recorder.finishRecordingAsPicture ();
510+ fml::RefPtr<SkiaUnrefQueue> queue = fml::MakeRefCounted<SkiaUnrefQueue>(
511+ this ->GetCurrentTaskRunner (), fml::TimeDelta::FromSeconds (0 ));
512+ auto picture_layer = std::make_shared<PictureLayer>(
513+ SkPoint::Make (10 , 10 ),
514+ flutter::SkiaGPUObject<SkPicture>({sk_picture, queue}), false , false );
515+ root->Add (picture_layer);
516+ };
517+
518+ PumpOneFrame (shell.get (), 100 , 100 , builder);
519+ endFrameLatch.Wait ();
520+
521+ ASSERT_TRUE (end_frame_called);
522+
523+ DestroyShell (std::move (shell));
524+ }
525+
478526TEST_F (ShellTest,
479527 ExternalEmbedderEndFrameIsCalledWhenPostPrerollResultIsResubmit) {
480528 auto settings = CreateSettingsForFixture ();
481529 fml::AutoResetWaitableEvent endFrameLatch;
482530 bool end_frame_called = false ;
483- auto end_frame_callback = [&](bool should_resubmit_frame) {
484- ASSERT_TRUE (should_resubmit_frame);
485- end_frame_called = true ;
486- endFrameLatch.Signal ();
487- };
531+ auto end_frame_callback =
532+ [&](bool should_resubmit_frame,
533+ fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) {
534+ ASSERT_TRUE (raster_thread_merger.get () != nullptr );
535+ ASSERT_TRUE (should_resubmit_frame);
536+ end_frame_called = true ;
537+ endFrameLatch.Signal ();
538+ };
488539 auto external_view_embedder = std::make_shared<ShellTestExternalViewEmbedder>(
489- end_frame_callback, PostPrerollResult::kResubmitFrame );
540+ end_frame_callback, PostPrerollResult::kResubmitFrame , true );
490541 auto shell = CreateShell (std::move (settings), GetTaskRunnersForFixture (),
491542 false , external_view_embedder);
492543
0 commit comments