diff --git a/engine/src/flutter/runtime/dart_isolate.cc b/engine/src/flutter/runtime/dart_isolate.cc index d1ecaf0191..1b887a7748 100644 --- a/engine/src/flutter/runtime/dart_isolate.cc +++ b/engine/src/flutter/runtime/dart_isolate.cc @@ -257,10 +257,6 @@ bool DartIsolate::PrepareForRunningFromPrecompiledCode() { return false; } - if (!DartVM::IsRunningPrecompiledCode()) { - return false; - } - tonic::DartState::Scope scope(this); if (Dart_IsNull(Dart_RootLibrary())) { @@ -342,9 +338,8 @@ bool DartIsolate::PrepareForRunningFromSnapshot( tonic::DartState::Scope scope(this); - if (!Dart_IsNull(Dart_RootLibrary())) { - return false; - } + // Use root library provided by kernel in favor of one provided by snapshot. + Dart_SetRootLibrary(Dart_Null()); if (!LoadSnapshot(mapping, last_piece)) { return false; diff --git a/engine/src/flutter/shell/common/isolate_configuration.cc b/engine/src/flutter/shell/common/isolate_configuration.cc index 60610e4770..06e62fedfb 100644 --- a/engine/src/flutter/shell/common/isolate_configuration.cc +++ b/engine/src/flutter/shell/common/isolate_configuration.cc @@ -31,20 +31,17 @@ bool IsolateConfiguration::PrepareIsolate( return DoPrepareIsolate(*isolate); } -class PrecompiledIsolateConfiguration final : public IsolateConfiguration { +class AppSnapshotIsolateConfiguration final : public IsolateConfiguration { public: - PrecompiledIsolateConfiguration() = default; + AppSnapshotIsolateConfiguration() = default; // |shell::IsolateConfiguration| bool DoPrepareIsolate(blink::DartIsolate& isolate) override { - if (!blink::DartVM::IsRunningPrecompiledCode()) { - return false; - } return isolate.PrepareForRunningFromPrecompiledCode(); } private: - FXL_DISALLOW_COPY_AND_ASSIGN(PrecompiledIsolateConfiguration); + FXL_DISALLOW_COPY_AND_ASSIGN(AppSnapshotIsolateConfiguration); }; class SnapshotIsolateConfiguration : public IsolateConfiguration { @@ -122,7 +119,7 @@ std::unique_ptr IsolateConfiguration::InferFromSettings( fml::RefPtr asset_manager) { // Running in AOT mode. if (blink::DartVM::IsRunningPrecompiledCode()) { - return CreateForPrecompiledCode(); + return CreateForAppSnapshot(); } // Run from sources. @@ -193,8 +190,8 @@ std::unique_ptr IsolateConfiguration::InferFromSettings( } std::unique_ptr -IsolateConfiguration::CreateForPrecompiledCode() { - return std::make_unique(); +IsolateConfiguration::CreateForAppSnapshot() { + return std::make_unique(); } std::unique_ptr IsolateConfiguration::CreateForSnapshot( diff --git a/engine/src/flutter/shell/common/isolate_configuration.h b/engine/src/flutter/shell/common/isolate_configuration.h index a0b9ebe2fa..19e4834c3e 100644 --- a/engine/src/flutter/shell/common/isolate_configuration.h +++ b/engine/src/flutter/shell/common/isolate_configuration.h @@ -24,7 +24,7 @@ class IsolateConfiguration { const blink::Settings& settings, fml::RefPtr asset_manager); - static std::unique_ptr CreateForPrecompiledCode(); + static std::unique_ptr CreateForAppSnapshot(); static std::unique_ptr CreateForSnapshot( std::unique_ptr snapshot); diff --git a/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc b/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc index 418065f400..05cfa0d48c 100644 --- a/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc +++ b/engine/src/flutter/shell/platform/android/platform_view_android_jni.cc @@ -178,7 +178,7 @@ static void SurfaceDestroyed(JNIEnv* env, jobject jcaller, jlong shell_holder) { std::unique_ptr CreateIsolateConfiguration( const blink::AssetManager& asset_manager) { if (blink::DartVM::IsRunningPrecompiledCode()) { - return IsolateConfiguration::CreateForPrecompiledCode(); + return IsolateConfiguration::CreateForAppSnapshot(); } const auto configuration_from_blob = @@ -200,7 +200,8 @@ std::unique_ptr CreateIsolateConfiguration( return script; } - return nullptr; + // This happens when starting isolate directly from CoreJIT snapshot. + return IsolateConfiguration::CreateForAppSnapshot(); } static void RunBundleAndSnapshot(