This repository was archived by the owner on Feb 25, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +33
-0
lines changed Expand file tree Collapse file tree 3 files changed +33
-0
lines changed Original file line number Diff line number Diff line change @@ -466,6 +466,17 @@ RasterStatus Rasterizer::DrawToSurface(flutter::LayerTree& layer_tree) {
466466 raster_status == RasterStatus::kSkipAndRetry ) {
467467 return raster_status;
468468 }
469+ if (shared_engine_block_thread_merging_ && raster_thread_merger_ &&
470+ raster_thread_merger_->IsMerged ()) {
471+ // TODO(73620): Remove when platform views are accounted for.
472+ FML_LOG (ERROR)
473+ << " Error: Thread merging not implemented for engines with shared "
474+ " components.\n\n "
475+ " This is likely a result of using platform views with enigne "
476+ " groups. See "
477+ " https://github.com/flutter/flutter/issues/73620." ;
478+ fml::KillProcess ();
479+ }
469480 if (external_view_embedder_ &&
470481 (!raster_thread_merger_ || raster_thread_merger_->IsMerged ())) {
471482 FML_DCHECK (!frame->IsSubmitted ());
Original file line number Diff line number Diff line change @@ -434,6 +434,15 @@ class Rasterizer final : public SnapshotDelegate {
434434 // /
435435 void DisableThreadMergerIfNeeded ();
436436
437+ // / @brief Mechanism to stop thread merging when using shared engine
438+ // / components.
439+ // / @details This is a temporary workaround until thread merging can be
440+ // / supported correctly. This should be called on the raster
441+ // / thread.
442+ // / @see https://github.com/flutter/flutter/issues/73620
443+ // /
444+ void BlockThreadMerging () { shared_engine_block_thread_merging_ = true ; }
445+
437446 private:
438447 Delegate& delegate_;
439448 std::unique_ptr<Surface> surface_;
@@ -450,6 +459,7 @@ class Rasterizer final : public SnapshotDelegate {
450459 fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger_;
451460 fml::TaskRunnerAffineWeakPtrFactory<Rasterizer> weak_factory_;
452461 std::shared_ptr<ExternalViewEmbedder> external_view_embedder_;
462+ bool shared_engine_block_thread_merging_ = false ;
453463
454464 // |SnapshotDelegate|
455465 sk_sp<SkImage> MakeRasterSnapshot (sk_sp<SkPicture> picture,
Original file line number Diff line number Diff line change @@ -500,6 +500,18 @@ std::unique_ptr<Shell> Shell::Spawn(
500500 }));
501501 result->shared_resource_context_ = io_manager_->GetSharedResourceContext ();
502502 result->RunEngine (std::move (run_configuration));
503+
504+ task_runners_.GetRasterTaskRunner ()->PostTask (
505+ [rasterizer = rasterizer_->GetWeakPtr (),
506+ spawn_rasterizer = result->rasterizer_ ->GetWeakPtr ()]() {
507+ if (rasterizer) {
508+ rasterizer->BlockThreadMerging ();
509+ }
510+ if (spawn_rasterizer) {
511+ spawn_rasterizer->BlockThreadMerging ();
512+ }
513+ });
514+
503515 return result;
504516}
505517
You can’t perform that action at this time.
0 commit comments