diff --git a/DEPS b/DEPS index d7ac7916f9..eb6db1f182 100644 --- a/DEPS +++ b/DEPS @@ -27,7 +27,7 @@ vars = { # Note: When updating the Dart revision, ensure that all entries that are # dependencies of dart are also updated - 'dart_revision': 'b43da048c31a16b9993de1536406ed014ef73ffd', + 'dart_revision': 'b46af1e75f9d124ce0e5f8226d570e93ac87d3a9', 'dart_boringssl_gen_revision': '1a810313a0290e1caace9da73fa3ab89995ad2c7', 'dart_boringssl_revision': 'd519bf6be0b447fb80fbc539d4bff4479b5482a2', 'dart_observatory_packages_revision': '26aad88f1c1915d39bbcbff3cad589e2402fdcf1', diff --git a/engine/src/flutter/common/settings.h b/engine/src/flutter/common/settings.h index f8bc41750a..4c7a9323ee 100644 --- a/engine/src/flutter/common/settings.h +++ b/engine/src/flutter/common/settings.h @@ -25,10 +25,10 @@ struct Settings { bool enable_dart_profiling = false; bool use_test_fonts = false; std::string aot_snapshot_path; - std::string aot_isolate_snapshot_file_name; - std::string aot_vm_isolate_snapshot_file_name; - std::string aot_instructions_blob_file_name; - std::string aot_rodata_blob_file_name; + std::string aot_vm_snapshot_data_filename; + std::string aot_vm_snapshot_instr_filename; + std::string aot_isolate_snapshot_data_filename; + std::string aot_isolate_snapshot_instr_filename; std::string application_library_path; std::string temp_directory_path; std::vector dart_flags; diff --git a/engine/src/flutter/lib/snapshot/snapshot.c.tmpl b/engine/src/flutter/lib/snapshot/snapshot.c.tmpl index 45798f16e4..52ed833d1b 100644 --- a/engine/src/flutter/lib/snapshot/snapshot.c.tmpl +++ b/engine/src/flutter/lib/snapshot/snapshot.c.tmpl @@ -10,12 +10,16 @@ // generated snapshot binary file for the vm isolate. // This string forms the content of the dart vm isolate snapshot which // is loaded into the vm isolate. -const uint8_t kVmIsolateSnapshot[] +const uint8_t kDartVmSnapshotData[] __attribute__((visibility("default"), aligned(8), used)) = { %s }; +const uint8_t kDartVmSnapshotInstructions[] + __attribute__((visibility("default"), aligned(8), used)) = {}; // The string on the next line will be filled in with the contents of the // generated snapshot binary file for a regular dart isolate. // This string forms the content of a regular dart isolate snapshot which // is loaded into an isolate when it is created. -const uint8_t kIsolateSnapshot[] +const uint8_t kDartIsolateSnapshotData[] __attribute__((visibility("default"), aligned(8), used)) = { %s }; +const uint8_t kDartIsolateSnapshotInstructions[] + __attribute__((visibility("default"), aligned(8), used)) = {}; diff --git a/engine/src/flutter/runtime/dart_controller.cc b/engine/src/flutter/runtime/dart_controller.cc index ee90dec6df..947b1db3e2 100644 --- a/engine/src/flutter/runtime/dart_controller.cc +++ b/engine/src/flutter/runtime/dart_controller.cc @@ -136,7 +136,9 @@ void DartController::CreateIsolateFor(const std::string& script_uri, char* error = nullptr; Dart_Isolate isolate = Dart_CreateIsolate( script_uri.c_str(), "main", - reinterpret_cast(DART_SYMBOL(kIsolateSnapshot)), nullptr, + reinterpret_cast(DART_SYMBOL(kDartIsolateSnapshotData)), + reinterpret_cast(DART_SYMBOL(kDartIsolateSnapshotInstructions)), + nullptr, static_cast(state.get()), &error); FTL_CHECK(isolate) << error; ui_dart_state_ = state.release(); diff --git a/engine/src/flutter/runtime/dart_init.cc b/engine/src/flutter/runtime/dart_init.cc index 3fe0676c36..7dfeff1c72 100644 --- a/engine/src/flutter/runtime/dart_init.cc +++ b/engine/src/flutter/runtime/dart_init.cc @@ -198,7 +198,9 @@ Dart_Isolate ServiceIsolateCreateCallback(const char* script_uri, tonic::DartState* dart_state = new tonic::DartState(); Dart_Isolate isolate = Dart_CreateIsolate( script_uri, "main", - reinterpret_cast(DART_SYMBOL(kIsolateSnapshot)), nullptr, + reinterpret_cast(DART_SYMBOL(kDartIsolateSnapshotData)), + reinterpret_cast(DART_SYMBOL(kDartIsolateSnapshotInstructions)), + nullptr, dart_state, error); FTL_CHECK(isolate) << error; dart_state->SetIsolate(isolate); @@ -276,7 +278,9 @@ Dart_Isolate IsolateCreateCallback(const char* script_uri, Dart_Isolate isolate = Dart_CreateIsolate( script_uri, main, - reinterpret_cast(DART_SYMBOL(kIsolateSnapshot)), nullptr, + reinterpret_cast(DART_SYMBOL(kDartIsolateSnapshotData)), + reinterpret_cast(DART_SYMBOL(kDartIsolateSnapshotInstructions)), + nullptr, dart_state, error); FTL_CHECK(isolate) << error; dart_state->SetIsolate(isolate); @@ -373,10 +377,10 @@ DartJniIsolateData* GetDartJniDataForCurrentIsolate() { #if DART_ALLOW_DYNAMIC_RESOLUTION -constexpr char kVmIsolateSnapshotName[] = "kVmIsolateSnapshot"; -constexpr char kIsolateSnapshotName[] = "kIsolateSnapshot"; -constexpr char kInstructionsSnapshotName[] = "kInstructionsSnapshot"; -constexpr char kDataSnapshotName[] = "kDataSnapshot"; +constexpr char kDartVmSnapshotDataName[] = "kDartVmSnapshotData"; +constexpr char kDartVmSnapshotInstructionsName[] = "kDartVmSnapshotInstructions"; +constexpr char kDartIsolateSnapshotDataName[] = "kDartIsolateSnapshotData"; +constexpr char kDartIsolateSnapshotInstructionsName[] = "kDartIsolateSnapshotInstructions"; #if OS(IOS) @@ -437,14 +441,14 @@ struct SymbolAsset { }; static SymbolAsset g_symbol_assets[] = { - {kVmIsolateSnapshotName, "snapshot_aot_vmisolate", false, - offsetof(Settings, aot_vm_isolate_snapshot_file_name)}, - {kIsolateSnapshotName, "snapshot_aot_isolate", false, - offsetof(Settings, aot_isolate_snapshot_file_name)}, - {kInstructionsSnapshotName, "snapshot_aot_instr", true, - offsetof(Settings, aot_instructions_blob_file_name)}, - {kDataSnapshotName, "snapshot_aot_rodata", false, - offsetof(Settings, aot_rodata_blob_file_name)}, + {kDartVmSnapshotDataName, "vm_snapshot_data", false, + offsetof(Settings, aot_vm_snapshot_data_filename)}, + {kDartVmSnapshotInstructionsName, "vm_snapshot_instr", true, + offsetof(Settings, aot_vm_snapshot_instr_filename)}, + {kDartIsolateSnapshotDataName, "isolate_snapshot_data", false, + offsetof(Settings, aot_isolate_snapshot_data_filename)}, + {kDartIsolateSnapshotInstructionsName, "isolate_snapshot_instr", true, + offsetof(Settings, aot_isolate_snapshot_instr_filename)}, }; // Resolve a precompiled snapshot symbol by mapping the corresponding asset @@ -498,29 +502,13 @@ void* _DartSymbolLookup(const char* symbol_name) { #endif -static const uint8_t* PrecompiledInstructionsSymbolIfPresent() { - return reinterpret_cast(DART_SYMBOL(kInstructionsSnapshot)); -} - -static const uint8_t* PrecompiledDataSnapshotSymbolIfPresent() { - return reinterpret_cast(DART_SYMBOL(kDataSnapshot)); -} - bool IsRunningPrecompiledCode() { TRACE_EVENT0("flutter", __func__); - return PrecompiledInstructionsSymbolIfPresent() != nullptr; + return Dart_IsPrecompiledRuntime(); } #else // DART_ALLOW_DYNAMIC_RESOLUTION -static const uint8_t* PrecompiledInstructionsSymbolIfPresent() { - return nullptr; -} - -static const uint8_t* PrecompiledDataSnapshotSymbolIfPresent() { - return nullptr; -} - bool IsRunningPrecompiledCode() { return false; } @@ -691,10 +679,10 @@ void InitDartVM() { TRACE_EVENT0("flutter", "Dart_Initialize"); Dart_InitializeParams params = {}; params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; - params.vm_isolate_snapshot = - reinterpret_cast(DART_SYMBOL(kVmIsolateSnapshot)); - params.instructions_snapshot = PrecompiledInstructionsSymbolIfPresent(); - params.data_snapshot = PrecompiledDataSnapshotSymbolIfPresent(); + params.vm_snapshot_data = + reinterpret_cast(DART_SYMBOL(kDartVmSnapshotData)); + params.vm_snapshot_instructions = + reinterpret_cast(DART_SYMBOL(kDartVmSnapshotInstructions)); params.create = IsolateCreateCallback; params.shutdown = IsolateShutdownCallback; params.thread_exit = ThreadExitCallback; diff --git a/engine/src/flutter/runtime/dart_init.h b/engine/src/flutter/runtime/dart_init.h index 942455a46e..c3e1bac842 100644 --- a/engine/src/flutter/runtime/dart_init.h +++ b/engine/src/flutter/runtime/dart_init.h @@ -18,10 +18,10 @@ namespace blink { #if DART_ALLOW_DYNAMIC_RESOLUTION -extern const char kVmIsolateSnapshotName[]; -extern const char kIsolateSnapshotName[]; -extern const char kInstructionsSnapshotName[]; -extern const char kDataSnapshotName[]; +extern const char kDartVmSnapshotDataName[]; +extern const char kDartVmSnapshotInstructionsName[]; +extern const char kDartIsolateSnapshotDataName[]; +extern const char kDartIsolateSnapshotInstructionsName[]; void* _DartSymbolLookup(const char* symbol_name); @@ -30,8 +30,10 @@ void* _DartSymbolLookup(const char* symbol_name); #else // DART_ALLOW_DYNAMIC_RESOLUTION extern "C" { -extern void* kVmIsolateSnapshot; -extern void* kIsolateSnapshot; +extern void* kDartVmSnapshotData; +extern void* kDartVmSnapshotInstructions; +extern void* kDartIsolateSnapshotData; +extern void* kDartIsolateSnapshotInstructions; } #define DART_SYMBOL(symbol) (&symbol) diff --git a/engine/src/flutter/shell/common/shell.cc b/engine/src/flutter/shell/common/shell.cc index 9c64802c0e..555b71cb36 100644 --- a/engine/src/flutter/shell/common/shell.cc +++ b/engine/src/flutter/shell/common/shell.cc @@ -181,18 +181,14 @@ void Shell::InitStandalone(std::string icu_data_path, settings.aot_snapshot_path = command_line.GetSwitchValueASCII(FlagForSwitch(Switch::AotSnapshotPath)); - - settings.aot_isolate_snapshot_file_name = command_line.GetSwitchValueASCII( - FlagForSwitch(Switch::AotIsolateSnapshot)); - - settings.aot_vm_isolate_snapshot_file_name = command_line.GetSwitchValueASCII( - FlagForSwitch(Switch::AotVmIsolateSnapshot)); - - settings.aot_instructions_blob_file_name = command_line.GetSwitchValueASCII( - FlagForSwitch(Switch::AotInstructionsBlob)); - - settings.aot_rodata_blob_file_name = - command_line.GetSwitchValueASCII(FlagForSwitch(Switch::AotRodataBlob)); + settings.aot_vm_snapshot_data_filename = command_line.GetSwitchValueASCII( + FlagForSwitch(Switch::AotVmSnapshotData)); + settings.aot_vm_snapshot_instr_filename = command_line.GetSwitchValueASCII( + FlagForSwitch(Switch::AotVmSnapshotInstructions)); + settings.aot_isolate_snapshot_data_filename = command_line.GetSwitchValueASCII( + FlagForSwitch(Switch::AotIsolateSnapshotData)); + settings.aot_isolate_snapshot_instr_filename = command_line.GetSwitchValueASCII( + FlagForSwitch(Switch::AotIsolateSnapshotInstructions)); settings.temp_directory_path = command_line.GetSwitchValueASCII(FlagForSwitch(Switch::CacheDirPath)); diff --git a/engine/src/flutter/shell/common/switches.h b/engine/src/flutter/shell/common/switches.h index 631b4ed8c0..5924c402a4 100644 --- a/engine/src/flutter/shell/common/switches.h +++ b/engine/src/flutter/shell/common/switches.h @@ -20,17 +20,11 @@ namespace shell { // clang-format on DEF_SWITCHES_START -DEF_SWITCH(AotInstructionsBlob, - "instructions-blob", - "Path to the instructions snapshot blob.") -DEF_SWITCH(AotIsolateSnapshot, - "isolate-snapshot", - "Path to the isolate snapshot blob.") -DEF_SWITCH(AotRodataBlob, "rodata-blob", "Path to the rodata blob.") DEF_SWITCH(AotSnapshotPath, "aot-snapshot-path", "Path to the AOT snapshot.") -DEF_SWITCH(AotVmIsolateSnapshot, - "vm-isolate-snapshot", - "Path to the VM isolate snapshot.") +DEF_SWITCH(AotVmSnapshotData, "vm-snapshot-data", "") +DEF_SWITCH(AotVmSnapshotInstructions, "vm-snapshot-instr", "") +DEF_SWITCH(AotIsolateSnapshotData, "isolate-snapshot-data", "") +DEF_SWITCH(AotIsolateSnapshotInstructions, "isolate-snapshot-instr", "") DEF_SWITCH(CacheDirPath, "cache-dir-path", "Path to the cache directory.") DEF_SWITCH(DartFlags, "dart-flags", diff --git a/engine/src/flutter/shell/platform/android/io/flutter/view/FlutterMain.java b/engine/src/flutter/shell/platform/android/io/flutter/view/FlutterMain.java index d7e20ffe8b..20b90351f2 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/view/FlutterMain.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/view/FlutterMain.java @@ -40,29 +40,29 @@ public class FlutterMain { // Must match values in sky::shell::switches private static final String AOT_SNAPSHOT_PATH_KEY = "aot-snapshot-path"; - private static final String AOT_ISOLATE_KEY = "isolate-snapshot"; - private static final String AOT_VM_ISOLATE_KEY = "vm-isolate-snapshot"; - private static final String AOT_INSTRUCTIONS_KEY = "instructions-blob"; - private static final String AOT_RODATA_KEY = "rodata-blob"; + private static final String AOT_VM_SNAPSHOT_DATA_KEY = "vm-snapshot-data"; + private static final String AOT_VM_SNAPSHOT_INSTR_KEY = "vm-snapshot-instr"; + private static final String AOT_ISOLATE_SNAPSHOT_DATA_KEY = "isolate-snapshot-data"; + private static final String AOT_ISOLATE_SNAPSHOT_INSTR_KEY = "isolate-snapshot-instr"; private static final String FLX_KEY = "flx"; // XML Attribute keys supported in AndroidManifest.xml - public static final String PUBLIC_AOT_ISOLATE_KEY = - FlutterMain.class.getName() + '.' + AOT_ISOLATE_KEY; - public static final String PUBLIC_AOT_VM_ISOLATE_KEY = - FlutterMain.class.getName() + '.' + AOT_VM_ISOLATE_KEY; - public static final String PUBLIC_AOT_INSTRUCTIONS_KEY = - FlutterMain.class.getName() + '.' + AOT_INSTRUCTIONS_KEY; - public static final String PUBLIC_AOT_RODATA_KEY = - FlutterMain.class.getName() + '.' + AOT_RODATA_KEY; + public static final String PUBLIC_AOT_VM_SNAPSHOT_DATA_KEY = + FlutterMain.class.getName() + '.' + AOT_VM_SNAPSHOT_DATA_KEY; + public static final String PUBLIC_AOT_VM_SNAPSHOT_INSTR_KEY = + FlutterMain.class.getName() + '.' + AOT_VM_SNAPSHOT_INSTR_KEY; + public static final String PUBLIC_AOT_ISOLATE_SNAPSHOT_DATA_KEY = + FlutterMain.class.getName() + '.' + AOT_ISOLATE_SNAPSHOT_DATA_KEY; + public static final String PUBLIC_AOT_ISOLATE_SNAPSHOT_INSTR_KEY = + FlutterMain.class.getName() + '.' + AOT_ISOLATE_SNAPSHOT_INSTR_KEY; public static final String PUBLIC_FLX_KEY = FlutterMain.class.getName() + '.' + FLX_KEY; // Resource names used for components of the precompiled snapshot. - private static final String DEFAULT_AOT_ISOLATE = "snapshot_aot_isolate"; - private static final String DEFAULT_AOT_VM_ISOLATE = "snapshot_aot_vmisolate"; - private static final String DEFAULT_AOT_INSTRUCTIONS = "snapshot_aot_instr"; - private static final String DEFAULT_AOT_RODATA = "snapshot_aot_rodata"; + private static final String DEFAULT_AOT_VM_SNAPSHOT_DATA = "vm_snapshot_data"; + private static final String DEFAULT_AOT_VM_SNAPSHOT_INSTR = "vm_snapshot_instr"; + private static final String DEFAULT_AOT_ISOLATE_SNAPSHOT_DATA = "isolate_snapshot_data"; + private static final String DEFAULT_AOT_ISOLATE_SNAPSHOT_INSTR = "isolate_snapshot_instr"; private static final String DEFAULT_FLX = "app.flx"; private static final String MANIFEST = "flutter.yaml"; @@ -74,10 +74,10 @@ public class FlutterMain { .build(); // Mutable because default values can be overridden via config properties - private static String sAotIsolate = DEFAULT_AOT_ISOLATE; - private static String sAotVmIsolate = DEFAULT_AOT_VM_ISOLATE; - private static String sAotInstructions = DEFAULT_AOT_INSTRUCTIONS; - private static String sAotRodata = DEFAULT_AOT_RODATA; + private static String sAotVmSnapshotData = DEFAULT_AOT_VM_SNAPSHOT_DATA; + private static String sAotVmSnapshotInstr = DEFAULT_AOT_VM_SNAPSHOT_INSTR; + private static String sAotIsolateSnapshotData = DEFAULT_AOT_ISOLATE_SNAPSHOT_DATA; + private static String sAotIsolateSnapshotInstr = DEFAULT_AOT_ISOLATE_SNAPSHOT_INSTR; private static String sFlx = DEFAULT_FLX; private static boolean sInitialized = false; @@ -173,10 +173,10 @@ public class FlutterMain { if (sIsPrecompiled) { shellArgs.add("--" + AOT_SNAPSHOT_PATH_KEY + "=" + PathUtils.getDataDirectory(applicationContext)); - shellArgs.add("--" + AOT_ISOLATE_KEY + "=" + sAotIsolate); - shellArgs.add("--" + AOT_VM_ISOLATE_KEY + "=" + sAotVmIsolate); - shellArgs.add("--" + AOT_INSTRUCTIONS_KEY + "=" + sAotInstructions); - shellArgs.add("--" + AOT_RODATA_KEY + "=" + sAotRodata); + shellArgs.add("--" + AOT_VM_SNAPSHOT_DATA_KEY + "=" + sAotVmSnapshotData); + shellArgs.add("--" + AOT_VM_SNAPSHOT_INSTR_KEY + "=" + sAotVmSnapshotInstr); + shellArgs.add("--" + AOT_ISOLATE_SNAPSHOT_DATA_KEY + "=" + sAotIsolateSnapshotData); + shellArgs.add("--" + AOT_ISOLATE_SNAPSHOT_INSTR_KEY + "=" + sAotIsolateSnapshotInstr); } else { shellArgs.add("--cache-dir-path=" + PathUtils.getCacheDirectory(applicationContext)); @@ -207,12 +207,10 @@ public class FlutterMain { Bundle metadata = applicationContext.getPackageManager().getApplicationInfo( applicationContext.getPackageName(), PackageManager.GET_META_DATA).metaData; if (metadata != null) { - sAotIsolate = metadata.getString(PUBLIC_AOT_ISOLATE_KEY, DEFAULT_AOT_ISOLATE); - sAotVmIsolate = metadata.getString(PUBLIC_AOT_VM_ISOLATE_KEY, - DEFAULT_AOT_VM_ISOLATE); - sAotInstructions = metadata.getString(PUBLIC_AOT_INSTRUCTIONS_KEY, - DEFAULT_AOT_INSTRUCTIONS); - sAotRodata = metadata.getString(PUBLIC_AOT_RODATA_KEY, DEFAULT_AOT_RODATA); + sAotVmSnapshotData = metadata.getString(PUBLIC_AOT_VM_SNAPSHOT_DATA_KEY, DEFAULT_AOT_VM_SNAPSHOT_DATA); + sAotVmSnapshotInstr = metadata.getString(PUBLIC_AOT_VM_SNAPSHOT_INSTR_KEY, DEFAULT_AOT_VM_SNAPSHOT_INSTR); + sAotIsolateSnapshotData = metadata.getString(PUBLIC_AOT_ISOLATE_SNAPSHOT_DATA_KEY, DEFAULT_AOT_ISOLATE_SNAPSHOT_DATA); + sAotIsolateSnapshotInstr = metadata.getString(PUBLIC_AOT_ISOLATE_SNAPSHOT_INSTR_KEY, DEFAULT_AOT_ISOLATE_SNAPSHOT_INSTR); sFlx = metadata.getString(PUBLIC_FLX_KEY, DEFAULT_FLX); } } catch (PackageManager.NameNotFoundException e) { @@ -230,10 +228,10 @@ public class FlutterMain { new ResourceCleaner(context).start(); sResourceExtractor = new ResourceExtractor(context) .addResources(SKY_RESOURCES) - .addResource(sAotIsolate) - .addResource(sAotVmIsolate) - .addResource(sAotInstructions) - .addResource(sAotRodata) + .addResource(sAotVmSnapshotData) + .addResource(sAotVmSnapshotInstr) + .addResource(sAotIsolateSnapshotData) + .addResource(sAotIsolateSnapshotInstr) .addResource(sFlx) .start(); } @@ -267,10 +265,10 @@ public class FlutterMain { private static void initAot(Context applicationContext) { Set assets = listRootAssets(applicationContext); sIsPrecompiled = assets.containsAll(Arrays.asList( - sAotIsolate, - sAotVmIsolate, - sAotInstructions, - sAotRodata + sAotVmSnapshotData, + sAotVmSnapshotInstr, + sAotIsolateSnapshotData, + sAotIsolateSnapshotInstr )); } diff --git a/engine/src/flutter/snapshotter/main.cc b/engine/src/flutter/snapshotter/main.cc index 3885d137a8..a981fafd76 100644 --- a/engine/src/flutter/snapshotter/main.cc +++ b/engine/src/flutter/snapshotter/main.cc @@ -24,8 +24,10 @@ #include "lib/tonic/file_loader/file_loader.h" extern "C" { -extern const uint8_t kVmIsolateSnapshot[]; -extern const uint8_t kIsolateSnapshot[]; +extern const uint8_t kDartVmSnapshotData[]; +extern const uint8_t kDartVmSnapshotInstructions[]; +extern const uint8_t kDartIsolateSnapshotData[]; +extern const uint8_t kDartIsolateSnapshotInstructions[]; } namespace { @@ -92,7 +94,8 @@ void InitDartVM() { FTL_CHECK(Dart_SetVMFlags(arraysize(kDartArgs), kDartArgs)); Dart_InitializeParams params = {}; params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; - params.vm_isolate_snapshot = kVmIsolateSnapshot; + params.vm_snapshot_data = kDartVmSnapshotData; + params.vm_snapshot_instructions = kDartVmSnapshotInstructions; char* error = Dart_Initialize(¶ms); if (error) FTL_LOG(FATAL) << error; @@ -101,7 +104,8 @@ void InitDartVM() { Dart_Isolate CreateDartIsolate() { char* error = nullptr; Dart_Isolate isolate = - Dart_CreateIsolate("dart:snapshot", "main", kIsolateSnapshot, + Dart_CreateIsolate("dart:snapshot", "main", kDartIsolateSnapshotData, + kDartIsolateSnapshotInstructions, nullptr, nullptr, &error); FTL_CHECK(isolate) << error; Dart_ExitIsolate();