@@ -76,8 +76,8 @@ void Rasterizer::Setup(std::unique_ptr<Surface> surface) {
7676 user_override_resource_cache_bytes_);
7777 }
7878 compositor_context_->OnGrContextCreated ();
79- if (surface_-> GetExternalViewEmbedder () &&
80- surface_-> GetExternalViewEmbedder () ->SupportsDynamicThreadMerging () &&
79+ if (external_view_embedder_ &&
80+ external_view_embedder_ ->SupportsDynamicThreadMerging () &&
8181 !raster_thread_merger_) {
8282 const auto platform_id =
8383 delegate_.GetTaskRunners ().GetPlatformTaskRunner ()->GetTaskQueueId ();
@@ -192,9 +192,9 @@ void Rasterizer::Draw(fml::RefPtr<Pipeline<flutter::LayerTree>> pipeline,
192192
193193 // Merging the thread as we know the next `Draw` should be run on the platform
194194 // thread.
195- if (surface_ != nullptr && surface_-> GetExternalViewEmbedder () != nullptr ) {
196- surface_-> GetExternalViewEmbedder () ->EndFrame (should_resubmit_frame,
197- raster_thread_merger_);
195+ if (external_view_embedder_ ) {
196+ external_view_embedder_ ->EndFrame (should_resubmit_frame,
197+ raster_thread_merger_);
198198 }
199199
200200 // Consume as many pipeline items as possible. But yield the event loop
@@ -424,14 +424,12 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
424424 // for instrumentation.
425425 compositor_context_->ui_time ().SetLapTime (layer_tree.build_time ());
426426
427- auto * external_view_embedder = surface_->GetExternalViewEmbedder ();
428-
429427 SkCanvas* embedder_root_canvas = nullptr ;
430- if (external_view_embedder != nullptr ) {
431- external_view_embedder ->BeginFrame (
428+ if (external_view_embedder_ ) {
429+ external_view_embedder_ ->BeginFrame (
432430 layer_tree.frame_size (), surface_->GetContext (),
433431 layer_tree.device_pixel_ratio (), raster_thread_merger_);
434- embedder_root_canvas = external_view_embedder ->GetRootCanvas ();
432+ embedder_root_canvas = external_view_embedder_ ->GetRootCanvas ();
435433 }
436434
437435 // On Android, the external view embedder deletes surfaces in `BeginFrame`.
@@ -454,13 +452,13 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
454452 embedder_root_canvas ? embedder_root_canvas : frame->SkiaCanvas ();
455453
456454 auto compositor_frame = compositor_context_->AcquireFrame (
457- surface_->GetContext (), // skia GrContext
458- root_surface_canvas, // root surface canvas
459- external_view_embedder, // external view embedder
460- root_surface_transformation, // root surface transformation
461- true , // instrumentation enabled
462- frame->supports_readback (), // surface supports pixel reads
463- raster_thread_merger_ // thread merger
455+ surface_->GetContext (), // skia GrContext
456+ root_surface_canvas, // root surface canvas
457+ external_view_embedder_. get (), // external view embedder
458+ root_surface_transformation, // root surface transformation
459+ true , // instrumentation enabled
460+ frame->supports_readback (), // surface supports pixel reads
461+ raster_thread_merger_ // thread merger
464462 );
465463
466464 if (compositor_frame) {
@@ -469,10 +467,10 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
469467 raster_status == RasterStatus::kSkipAndRetry ) {
470468 return raster_status;
471469 }
472- if (external_view_embedder != nullptr ) {
470+ if (external_view_embedder_ ) {
473471 FML_DCHECK (!frame->IsSubmitted ());
474- external_view_embedder ->SubmitFrame (surface_->GetContext (),
475- std::move (frame));
472+ external_view_embedder_ ->SubmitFrame (surface_->GetContext (),
473+ std::move (frame));
476474 } else {
477475 frame->Submit ();
478476 }
@@ -653,6 +651,11 @@ void Rasterizer::SetNextFrameCallback(const fml::closure& callback) {
653651 next_frame_callback_ = callback;
654652}
655653
654+ void Rasterizer::SetExternalViewEmbedder (
655+ const std::shared_ptr<ExternalViewEmbedder>& view_embedder) {
656+ external_view_embedder_ = view_embedder;
657+ }
658+
656659void Rasterizer::FireNextFrameCallbackIfPresent () {
657660 if (!next_frame_callback_) {
658661 return ;
0 commit comments