@@ -250,38 +250,19 @@ Engine::Engine(Delegate& delegate,
250250 // Setup the callback that will instantiate the rasterizer.
251251 flutter::Shell::CreateCallback<flutter::Rasterizer> on_create_rasterizer;
252252#if defined(LEGACY_FUCHSIA_EMBEDDER)
253- on_create_rasterizer = [this , &product_config ](flutter::Shell& shell) {
253+ on_create_rasterizer = [this ](flutter::Shell& shell) {
254254 if (use_legacy_renderer_) {
255255 FML_DCHECK (session_connection_);
256256 FML_DCHECK (surface_producer_);
257257 FML_DCHECK (legacy_external_view_embedder_);
258258
259- if (product_config.enable_shader_warmup ()) {
260- FML_DCHECK (surface_producer_);
261- WarmupSkps (shell.GetDartVM ()
262- ->GetConcurrentMessageLoop ()
263- ->GetTaskRunner ()
264- .get (),
265- shell.GetTaskRunners ().GetRasterTaskRunner ().get (),
266- surface_producer_.value ());
267- }
268-
269259 auto compositor_context =
270260 std::make_unique<flutter_runner::CompositorContext>(
271261 session_connection_.value (), surface_producer_.value (),
272262 legacy_external_view_embedder_);
273263 return std::make_unique<flutter::Rasterizer>(
274264 shell, std::move (compositor_context));
275265 } else {
276- if (product_config.enable_shader_warmup ()) {
277- FML_DCHECK (surface_producer_);
278- WarmupSkps (shell.GetDartVM ()
279- ->GetConcurrentMessageLoop ()
280- ->GetTaskRunner ()
281- .get (),
282- shell.GetTaskRunners ().GetRasterTaskRunner ().get (),
283- surface_producer_.value ());
284- }
285266 return std::make_unique<flutter::Rasterizer>(shell);
286267 }
287268 };
@@ -660,13 +641,9 @@ void Engine::WarmupSkps(fml::BasicTaskRunner* concurrent_task_runner,
660641 fml::BasicTaskRunner* raster_task_runner,
661642 VulkanSurfaceProducer& surface_producer) {
662643 SkISize size = SkISize::Make (1024 , 600 );
663- // We use a raw pointer here because we want to keep this alive until all gpu
664- // work is done and the callbacks skia takes for this are function pointers
665- // so we are unable to use a lambda that captures the smart pointer.
666- SurfaceProducerSurface* skp_warmup_surface =
667- surface_producer.ProduceOffscreenSurface (size).release ();
644+ auto skp_warmup_surface = surface_producer.ProduceOffscreenSurface (size);
668645 if (!skp_warmup_surface) {
669- FML_LOG (ERROR) << " Failed to create offscreen warmup surface " ;
646+ FML_LOG (ERROR) << " SkSurface::MakeRenderTarget returned null " ;
670647 return ;
671648 }
672649
@@ -678,17 +655,8 @@ void Engine::WarmupSkps(fml::BasicTaskRunner* concurrent_task_runner,
678655 std::vector<std::unique_ptr<fml::Mapping>> skp_mappings =
679656 flutter::PersistentCache::GetCacheForProcess ()
680657 ->GetSkpsFromAssetManager ();
681-
682- size_t total_size = 0 ;
683- for (auto & mapping : skp_mappings) {
684- total_size += mapping->GetSize ();
685- }
686-
687- FML_LOG (INFO) << " Shader warmup got " << skp_mappings.size ()
688- << " skp's with a total size of " << total_size << " bytes" ;
689-
690658 std::vector<sk_sp<SkPicture>> pictures;
691- unsigned int i = 0 ;
659+ int i = 0 ;
692660 for (auto & mapping : skp_mappings) {
693661 std::unique_ptr<SkMemoryStream> stream =
694662 SkMemoryStream::MakeDirect (mapping->GetMapping (), mapping->GetSize ());
@@ -704,28 +672,12 @@ void Engine::WarmupSkps(fml::BasicTaskRunner* concurrent_task_runner,
704672
705673 // Tell raster task runner to warmup have the compositor
706674 // context warm up the newly deserialized picture
707- raster_task_runner->PostTask ([skp_warmup_surface, picture,
708- &surface_producer, i,
709- count = skp_mappings.size ()] {
710- TRACE_DURATION (" flutter" , " WarmupSkp" );
711- skp_warmup_surface->GetSkiaSurface ()->getCanvas ()->drawPicture (picture);
712-
713- if (i < count - 1 ) {
714- // For all but the last skp we fire and forget
715- surface_producer.gr_context ()->flushAndSubmit ();
716- } else {
717- // For the last skp we provide a callback that frees the warmup
718- // surface
719- struct GrFlushInfo flush_info;
720- flush_info.fFinishedContext = skp_warmup_surface;
721- flush_info.fFinishedProc = [](void * skp_warmup_surface) {
722- delete static_cast <SurfaceProducerSurface*>(skp_warmup_surface);
723- };
724-
725- surface_producer.gr_context ()->flush (flush_info);
726- surface_producer.gr_context ()->submit ();
727- }
728- });
675+ raster_task_runner->PostTask (
676+ [skp_warmup_surface, picture, &surface_producer] {
677+ TRACE_DURATION (" flutter" , " WarmupSkp" );
678+ skp_warmup_surface->getCanvas ()->drawPicture (picture);
679+ surface_producer.gr_context ()->flush ();
680+ });
729681 i++;
730682 }
731683 });
0 commit comments