@@ -68,6 +68,44 @@ std::unique_ptr<Engine> CreateEngine(
6868}
6969} // namespace
7070
71+ <<<<<<< HEAD
72+ =======
73+ std::unique_ptr<Shell> Shell::Create (
74+ const PlatformData& platform_data,
75+ TaskRunners task_runners,
76+ Settings settings,
77+ const Shell::CreateCallback<PlatformView>& on_create_platform_view,
78+ const Shell::CreateCallback<Rasterizer>& on_create_rasterizer,
79+ bool is_gpu_disabled) {
80+ // This must come first as it initializes tracing.
81+ PerformInitializationTasks (settings);
82+
83+ TRACE_EVENT0 (" flutter" , " Shell::Create" );
84+
85+ // Always use the `vm_snapshot` and `isolate_snapshot` provided by the
86+ // settings to launch the VM. If the VM is already running, the snapshot
87+ // arguments are ignored.
88+ auto vm_snapshot = DartSnapshot::VMSnapshotFromSettings (settings);
89+ auto isolate_snapshot = DartSnapshot::IsolateSnapshotFromSettings (settings);
90+ auto vm = DartVMRef::Create (settings, vm_snapshot, isolate_snapshot);
91+ FML_CHECK (vm) << " Must be able to initialize the VM." ;
92+
93+ // If the settings did not specify an `isolate_snapshot`, fall back to the
94+ // one the VM was launched with.
95+ if (!isolate_snapshot) {
96+ isolate_snapshot = vm->GetVMData ()->GetIsolateSnapshot ();
97+ }
98+ return CreateWithSnapshot (std::move (platform_data), //
99+ std::move (task_runners), //
100+ std::move (settings), //
101+ std::move (vm), //
102+ std::move (isolate_snapshot), //
103+ std::move (on_create_platform_view), //
104+ std::move (on_create_rasterizer), //
105+ CreateEngine, is_gpu_disabled);
106+ }
107+
108+ >>>>>>> 7a672981c... Started initializing the gpu disable syncswitch based on the app state.
71109std::unique_ptr<Shell> Shell::CreateShellOnPlatformThread (
72110 DartVMRef vm,
73111 TaskRunners task_runners,
@@ -76,7 +114,8 @@ std::unique_ptr<Shell> Shell::CreateShellOnPlatformThread(
76114 fml::RefPtr<const DartSnapshot> isolate_snapshot,
77115 const Shell::CreateCallback<PlatformView>& on_create_platform_view,
78116 const Shell::CreateCallback<Rasterizer>& on_create_rasterizer,
79- const Shell::EngineCreateCallback& on_create_engine) {
117+ const Shell::EngineCreateCallback& on_create_engine,
118+ bool is_gpu_disabled) {
80119 if (!task_runners.IsValid ()) {
81120 FML_LOG (ERROR) << " Task runners to run the shell were invalid." ;
82121 return nullptr ;
@@ -86,7 +125,8 @@ std::unique_ptr<Shell> Shell::CreateShellOnPlatformThread(
86125 new Shell (std::move (vm), task_runners, settings,
87126 std::make_shared<VolatilePathTracker>(
88127 task_runners.GetUITaskRunner (),
89- !settings.skia_deterministic_rendering_on_cpu )));
128+ !settings.skia_deterministic_rendering_on_cpu ),
129+ is_gpu_disabled));
90130
91131 // Create the rasterizer on the raster thread.
92132 std::promise<std::unique_ptr<Rasterizer>> rasterizer_promise;
@@ -315,8 +355,14 @@ std::unique_ptr<Shell> Shell::Create(
315355 fml::RefPtr<const DartSnapshot> isolate_snapshot,
316356 const Shell::CreateCallback<PlatformView>& on_create_platform_view,
317357 const Shell::CreateCallback<Rasterizer>& on_create_rasterizer,
358+ <<<<<<< HEAD
318359 DartVMRef vm,
319360 const Shell::EngineCreateCallback& on_create_engine) {
361+ =======
362+ const Shell::EngineCreateCallback& on_create_engine,
363+ bool is_gpu_disabled) {
364+ // This must come first as it initializes tracing.
365+ >>>>>>> 7a672981c... Started initializing the gpu disable syncswitch based on the app state.
320366 PerformInitializationTasks (settings);
321367 PersistentCache::SetCacheSkSL (settings.cache_sksl );
322368
@@ -331,6 +377,7 @@ std::unique_ptr<Shell> Shell::Create(
331377 std::unique_ptr<Shell> shell;
332378 fml::TaskRunner::RunNowOrPostTask (
333379 task_runners.GetPlatformTaskRunner (),
380+ <<<<<<< HEAD
334381 fml::MakeCopyable ([&latch, //
335382 vm = std::move (vm), //
336383 &shell, //
@@ -351,18 +398,44 @@ std::unique_ptr<Shell> Shell::Create(
351398 on_create_engine);
352399 latch.Signal ();
353400 }));
401+ =======
402+ fml::MakeCopyable (
403+ [&latch, //
404+ &shell, //
405+ task_runners = std::move (task_runners), //
406+ platform_data = std::move (platform_data), //
407+ settings = std::move (settings), //
408+ vm = std::move (vm), //
409+ isolate_snapshot = std::move (isolate_snapshot), //
410+ on_create_platform_view = std::move (on_create_platform_view), //
411+ on_create_rasterizer = std::move (on_create_rasterizer), //
412+ on_create_engine = std::move (on_create_engine),
413+ is_gpu_disabled]() mutable {
414+ shell = CreateShellOnPlatformThread (
415+ std::move (vm), //
416+ std::move (task_runners), //
417+ std::move (platform_data), //
418+ std::move (settings), //
419+ std::move (isolate_snapshot), //
420+ std::move (on_create_platform_view), //
421+ std::move (on_create_rasterizer), //
422+ std::move (on_create_engine), is_gpu_disabled);
423+ latch.Signal ();
424+ }));
425+ >>>>>>> 7a672981c... Started initializing the gpu disable syncswitch based on the app state.
354426 latch.Wait ();
355427 return shell;
356428}
357429
358430Shell::Shell (DartVMRef vm,
359431 TaskRunners task_runners,
360432 Settings settings,
361- std::shared_ptr<VolatilePathTracker> volatile_path_tracker)
433+ std::shared_ptr<VolatilePathTracker> volatile_path_tracker,
434+ bool is_gpu_disabled)
362435 : task_runners_ (std::move (task_runners)),
363436 settings_ (std::move (settings)),
364437 vm_ (std::move (vm)),
365- is_gpu_disabled_sync_switch_(new fml::SyncSwitch()),
438+ is_gpu_disabled_sync_switch_ (new fml::SyncSwitch (is_gpu_disabled )),
366439 volatile_path_tracker_ (std::move (volatile_path_tracker)),
367440 weak_factory_gpu_ (nullptr ),
368441 weak_factory_ (this ) {
@@ -479,6 +552,7 @@ std::unique_ptr<Shell> Shell::Spawn(
479552 const CreateCallback<PlatformView>& on_create_platform_view,
480553 const CreateCallback<Rasterizer>& on_create_rasterizer) const {
481554 FML_DCHECK (task_runners_.IsValid ());
555+ <<<<<<< HEAD
482556 std::unique_ptr<Shell> result (Shell::Create (
483557 task_runners_, PlatformData{}, GetSettings (),
484558 vm_->GetVMData ()->GetIsolateSnapshot (), on_create_platform_view,
@@ -498,6 +572,36 @@ std::unique_ptr<Shell> Shell::Spawn(
498572 /* settings=*/ settings,
499573 /* animator=*/ std::move (animator));
500574 }));
575+ =======
576+ auto shell_maker = [&](bool is_gpu_disabled) {
577+ std::unique_ptr<Shell> result (CreateWithSnapshot (
578+ PlatformData{}, task_runners_, GetSettings (), vm_,
579+ vm_->GetVMData ()->GetIsolateSnapshot (), on_create_platform_view,
580+ on_create_rasterizer,
581+ [engine = this ->engine_ .get ()](
582+ Engine::Delegate& delegate,
583+ const PointerDataDispatcherMaker& dispatcher_maker, DartVM& vm,
584+ fml::RefPtr<const DartSnapshot> isolate_snapshot,
585+ TaskRunners task_runners, const PlatformData& platform_data,
586+ Settings settings, std::unique_ptr<Animator> animator,
587+ fml::WeakPtr<IOManager> io_manager,
588+ fml::RefPtr<SkiaUnrefQueue> unref_queue,
589+ fml::WeakPtr<SnapshotDelegate> snapshot_delegate,
590+ std::shared_ptr<VolatilePathTracker> volatile_path_tracker) {
591+ return engine->Spawn (/* delegate=*/ delegate,
592+ /* dispatcher_maker=*/ dispatcher_maker,
593+ /* settings=*/ settings,
594+ /* animator=*/ std::move (animator));
595+ },
596+ is_gpu_disabled));
597+ return result;
598+ };
599+ std::unique_ptr<Shell> result;
600+ GetIsGpuDisabledSyncSwitch ()->Execute (
601+ fml::SyncSwitch::Handlers ()
602+ .SetIfFalse ([&] { result = shell_maker (false ); })
603+ .SetIfTrue ([&] { result = shell_maker (true ); }));
604+ >>>>>>> 7a672981c... Started initializing the gpu disable syncswitch based on the app state.
501605 result->shared_resource_context_ = io_manager_->GetSharedResourceContext ();
502606 result->RunEngine (std::move (run_configuration));
503607
0 commit comments