diff --git a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart index 0202ddd9ca00c..13921fd1a7707 100644 --- a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart +++ b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart @@ -144,7 +144,7 @@ Future _testBuildIosFramework(Directory projectDir, {bool isModule = false final String aotSymbols = await dumpSymbolTable(debugAppFrameworkPath); - if (aotSymbols.contains('architecture') || aotSymbols.contains('_kDartVmSnapshot')) { + if (aotSymbols.contains('architecture') || aotSymbols.contains('_kDartSnapshot')) { throw TaskResult.failure('Debug App.framework contains AOT'); } @@ -164,7 +164,7 @@ Future _testBuildIosFramework(Directory projectDir, {bool isModule = false final String aotSymbols = await dumpSymbolTable(appFrameworkPath); - if (!aotSymbols.contains('_kDartVmSnapshot')) { + if (!aotSymbols.contains('_kDartSnapshot')) { throw TaskResult.failure('$mode App.framework missing Dart AOT'); } @@ -551,7 +551,7 @@ Future _testBuildMacOSFramework(Directory projectDir) async { final String aotSymbols = await dumpSymbolTable(debugAppFrameworkPath); - if (aotSymbols.contains('architecture') || aotSymbols.contains('_kDartVmSnapshot')) { + if (aotSymbols.contains('architecture') || aotSymbols.contains('_kDartSnapshot')) { throw TaskResult.failure('Debug App.framework contains AOT'); } @@ -571,7 +571,7 @@ Future _testBuildMacOSFramework(Directory projectDir) async { final String aotSymbols = await dumpSymbolTable(appFrameworkPath); - if (!aotSymbols.contains('_kDartVmSnapshot')) { + if (!aotSymbols.contains('_kDartSnapshot')) { throw TaskResult.failure('$mode App.framework missing Dart AOT'); } diff --git a/dev/devicelab/bin/tasks/module_test_ios.dart b/dev/devicelab/bin/tasks/module_test_ios.dart index 6cb0b1400e79e..2f732495f674c 100644 --- a/dev/devicelab/bin/tasks/module_test_ios.dart +++ b/dev/devicelab/bin/tasks/module_test_ios.dart @@ -671,7 +671,7 @@ Future _isAppAotBuild(Directory app) async { final String symbolTable = await dumpSymbolTable(binary); - return symbolTable.contains('kDartIsolateSnapshotInstructions'); + return symbolTable.contains('kDartSnapshotText'); } Future _createFakeDartPlugin(String name, Directory parent) async { diff --git a/engine/src/build/compiled_action.gni b/engine/src/build/compiled_action.gni index a3a2571d7a590..d700658e2846e 100644 --- a/engine/src/build/compiled_action.gni +++ b/engine/src/build/compiled_action.gni @@ -124,6 +124,9 @@ template("compiled_action") { if (defined(invoker.deps)) { deps += invoker.deps } + if (defined(invoker.public_deps)) { + public_deps = invoker.public_deps + } if (defined(invoker.depfile)) { depfile = invoker.depfile } diff --git a/engine/src/flutter/build/dart/internal/flutter_snapshot.gni b/engine/src/flutter/build/dart/internal/flutter_snapshot.gni index 6a4028e7a467c..21d20abce9ec4 100644 --- a/engine/src/flutter/build/dart/internal/flutter_snapshot.gni +++ b/engine/src/flutter/build/dart/internal/flutter_snapshot.gni @@ -134,12 +134,9 @@ template("flutter_snapshot") { isolate_snapshot_instructions, ] args += [ - "--snapshot_kind=app-jit", - "--load_vm_snapshot_data=" + rebase_path(vm_snapshot_data), - "--load_isolate_snapshot_data=" + rebase_path(snapshot_data), - "--isolate_snapshot_data=" + rebase_path(isolate_snapshot_data), - "--isolate_snapshot_instructions=" + - rebase_path(isolate_snapshot_instructions), + "--snapshot_kind=app", + "--snapshot_data=" + rebase_path(isolate_snapshot_data), + "--snapshot_text=" + rebase_path(isolate_snapshot_instructions), ] } diff --git a/engine/src/flutter/common/exported_symbols.sym b/engine/src/flutter/common/exported_symbols.sym index c9ad42cd3350e..1fb2c90c2ed8e 100644 --- a/engine/src/flutter/common/exported_symbols.sym +++ b/engine/src/flutter/common/exported_symbols.sym @@ -1,10 +1,8 @@ # These symbols are looked up from within the executable at runtime and must # be exported in the dynamic symbol table. { - kDartVmSnapshotData; - kDartVmSnapshotInstructions; - kDartIsolateSnapshotData; - kDartIsolateSnapshotInstructions; + kDartSnapshotData; + kDartSnapshotText; InternalFlutterGpu*; kInternalFlutterGpu*; }; diff --git a/engine/src/flutter/common/exported_symbols_mac.sym b/engine/src/flutter/common/exported_symbols_mac.sym index 09687a75427f5..37e246f9d2c06 100644 --- a/engine/src/flutter/common/exported_symbols_mac.sym +++ b/engine/src/flutter/common/exported_symbols_mac.sym @@ -1,8 +1,6 @@ # These symbols are looked up from within the executable at runtime and must # be exported in the dynamic symbol table. -_kDartVmSnapshotData -_kDartVmSnapshotInstructions -_kDartIsolateSnapshotData -_kDartIsolateSnapshotInstructions +_kDartSnapshotData +_kDartSnapshotText _InternalFlutterGpu* _kInternalFlutterGpu* diff --git a/engine/src/flutter/common/exported_test_symbols.sym b/engine/src/flutter/common/exported_test_symbols.sym index 12da485f23a4a..30e7707511c5b 100644 --- a/engine/src/flutter/common/exported_test_symbols.sym +++ b/engine/src/flutter/common/exported_test_symbols.sym @@ -1,10 +1,8 @@ # These symbols are looked up from within the executable at runtime and must # be exported in the dynamic symbol table. { - kDartVmSnapshotData; - kDartVmSnapshotInstructions; - kDartIsolateSnapshotData; - kDartIsolateSnapshotInstructions; + kDartSnapshotData; + kDartSnapshotText; InternalFlutterGpu*; kInternalFlutterGpu*; Spawn; diff --git a/engine/src/flutter/common/exported_test_symbols_mac.sym b/engine/src/flutter/common/exported_test_symbols_mac.sym index 83992eeeb9d89..33135b65a289f 100644 --- a/engine/src/flutter/common/exported_test_symbols_mac.sym +++ b/engine/src/flutter/common/exported_test_symbols_mac.sym @@ -1,9 +1,7 @@ # These symbols are looked up from within the executable at runtime and must # be exported in the dynamic symbol table. -_kDartVmSnapshotData -_kDartVmSnapshotInstructions -_kDartIsolateSnapshotData -_kDartIsolateSnapshotInstructions +_kDartSnapshotData +_kDartSnapshotText _InternalFlutterGpu* _kInternalFlutterGpu* _Spawn diff --git a/engine/src/flutter/lib/snapshot/BUILD.gn b/engine/src/flutter/lib/snapshot/BUILD.gn index e4b52cac21985..50ded25f3357b 100644 --- a/engine/src/flutter/lib/snapshot/BUILD.gn +++ b/engine/src/flutter/lib/snapshot/BUILD.gn @@ -53,6 +53,15 @@ group("generate_snapshot_bins") { } } +generated_file("vm_isolate_snapshot_data") { + contents = "" + outputs = [ "$target_gen_dir/vm_isolate_snapshot.bin" ] +} +generated_file("vm_isolate_snapshot_instructions") { + contents = "" + outputs = [ "$target_gen_dir/vm_snapshot_instructions.bin" ] +} + # Compiles a binary snapshot of the core Dart/Flutter platform. # # Inputs: @@ -84,15 +93,15 @@ compiled_action("generate_snapshot_bin") { inputs = [ platform_kernel ] deps = [ ":kernel_platform_files" ] + public_deps = [ + ":vm_isolate_snapshot_data", + ":vm_isolate_snapshot_instructions", + ] - vm_snapshot_data = "$target_gen_dir/vm_isolate_snapshot.bin" - vm_snapshot_instructions = "$target_gen_dir/vm_snapshot_instructions.bin" isolate_snapshot_data = "$target_gen_dir/isolate_snapshot.bin" isolate_snapshot_instructions = "$target_gen_dir/isolate_snapshot_instructions.bin" outputs = [ - vm_snapshot_data, - vm_snapshot_instructions, isolate_snapshot_data, isolate_snapshot_instructions, ] @@ -100,11 +109,8 @@ compiled_action("generate_snapshot_bin") { args = [ "--snapshot_kind=core", "--enable_mirrors=false", - "--vm_snapshot_data=" + rebase_path(vm_snapshot_data), - "--vm_snapshot_instructions=" + rebase_path(vm_snapshot_instructions), - "--isolate_snapshot_data=" + rebase_path(isolate_snapshot_data), - "--isolate_snapshot_instructions=" + - rebase_path(isolate_snapshot_instructions), + "--snapshot_data=" + rebase_path(isolate_snapshot_data), + "--snapshot_text=" + rebase_path(isolate_snapshot_instructions), ] if (is_debug && flutter_runtime_mode != "profile" && @@ -120,31 +126,17 @@ compiled_action("generate_snapshot_bin") { } } -bin_to_linkable("vm_snapshot_data_linkable") { - deps = [ ":generate_snapshot_bin" ] - input = "$target_gen_dir/vm_isolate_snapshot.bin" - symbol = "kDartVmSnapshotData" - executable = false -} - -bin_to_linkable("vm_snapshot_instructions_linkable") { - deps = [ ":generate_snapshot_bin" ] - input = "$target_gen_dir/vm_snapshot_instructions.bin" - symbol = "kDartVmSnapshotInstructions" - executable = true -} - bin_to_linkable("isolate_snapshot_data_linkable") { deps = [ ":generate_snapshot_bin" ] input = "$target_gen_dir/isolate_snapshot.bin" - symbol = "kDartIsolateSnapshotData" + symbol = "kDartSnapshotData" executable = false } bin_to_linkable("isolate_snapshot_instructions_linkable") { deps = [ ":generate_snapshot_bin" ] input = "$target_gen_dir/isolate_snapshot_instructions.bin" - symbol = "kDartIsolateSnapshotInstructions" + symbol = "kDartSnapshotText" executable = true } @@ -264,14 +256,10 @@ source_set("snapshot") { ":isolate_snapshot_data_linkable", ":isolate_snapshot_instructions_linkable", ":platform_strong_dill_linkable", - ":vm_snapshot_data_linkable", - ":vm_snapshot_instructions_linkable", ] sources = get_target_outputs(":isolate_snapshot_data_linkable") + get_target_outputs(":isolate_snapshot_instructions_linkable") + - get_target_outputs(":vm_snapshot_data_linkable") + - get_target_outputs(":vm_snapshot_instructions_linkable") + get_target_outputs(":platform_strong_dill_linkable") } diff --git a/engine/src/flutter/lib/snapshot/snapshot.h b/engine/src/flutter/lib/snapshot/snapshot.h index 9938f9fc42026..76d1d27fefcd7 100644 --- a/engine/src/flutter/lib/snapshot/snapshot.h +++ b/engine/src/flutter/lib/snapshot/snapshot.h @@ -10,10 +10,8 @@ #include extern "C" { -extern const uint8_t kDartVmSnapshotData[]; -extern const uint8_t kDartVmSnapshotInstructions[]; -extern const uint8_t kDartIsolateSnapshotData[]; -extern const uint8_t kDartIsolateSnapshotInstructions[]; +extern const uint8_t kDartSnapshotData[]; +extern const uint8_t kDartSnapshotText[]; } #endif // FLUTTER_LIB_SNAPSHOT_SNAPSHOT_H_ diff --git a/engine/src/flutter/runtime/dart_snapshot.cc b/engine/src/flutter/runtime/dart_snapshot.cc index 198a2e75a7edc..293ed44cc5fe2 100644 --- a/engine/src/flutter/runtime/dart_snapshot.cc +++ b/engine/src/flutter/runtime/dart_snapshot.cc @@ -15,11 +15,10 @@ namespace flutter { -const char* DartSnapshot::kVMDataSymbol = "kDartVmSnapshotData"; -const char* DartSnapshot::kVMInstructionsSymbol = "kDartVmSnapshotInstructions"; -const char* DartSnapshot::kIsolateDataSymbol = "kDartIsolateSnapshotData"; -const char* DartSnapshot::kIsolateInstructionsSymbol = - "kDartIsolateSnapshotInstructions"; +const char* DartSnapshot::kVMDataSymbol = "kDartSnapshotData"; +const char* DartSnapshot::kVMInstructionsSymbol = "kDartSnapshotText"; +const char* DartSnapshot::kIsolateDataSymbol = "kDartSnapshotData"; +const char* DartSnapshot::kIsolateInstructionsSymbol = "kDartSnapshotText"; // On Windows and Android (in debug mode) the engine finds the Dart snapshot // data through symbols that are statically linked into the executable. @@ -102,7 +101,7 @@ static std::shared_ptr SearchMapping( static std::shared_ptr ResolveVMData( const Settings& settings) { #if DART_SNAPSHOT_STATIC_LINK - return std::make_unique(kDartVmSnapshotData, + return std::make_unique(kDartSnapshotData, 0, // size nullptr, // release_func true // dontneed_safe @@ -121,7 +120,7 @@ static std::shared_ptr ResolveVMData( static std::shared_ptr ResolveVMInstructions( const Settings& settings) { #if DART_SNAPSHOT_STATIC_LINK - return std::make_unique(kDartVmSnapshotInstructions, + return std::make_unique(kDartSnapshotText, 0, // size nullptr, // release_func true // dontneed_safe @@ -140,7 +139,7 @@ static std::shared_ptr ResolveVMInstructions( static std::shared_ptr ResolveIsolateData( const Settings& settings) { #if DART_SNAPSHOT_STATIC_LINK - return std::make_unique(kDartIsolateSnapshotData, + return std::make_unique(kDartSnapshotData, 0, // size nullptr, // release_func true // dontneed_safe @@ -159,11 +158,10 @@ static std::shared_ptr ResolveIsolateData( static std::shared_ptr ResolveIsolateInstructions( const Settings& settings) { #if DART_SNAPSHOT_STATIC_LINK - return std::make_unique( - kDartIsolateSnapshotInstructions, - 0, // size - nullptr, // release_func - true // dontneed_safe + return std::make_unique(kDartSnapshotText, + 0, // size + nullptr, // release_func + true // dontneed_safe ); #else // DART_SNAPSHOT_STATIC_LINK return SearchMapping( diff --git a/engine/src/flutter/runtime/dart_vm.cc b/engine/src/flutter/runtime/dart_vm.cc index 06c945e0c30b7..9545914254b89 100644 --- a/engine/src/flutter/runtime/dart_vm.cc +++ b/engine/src/flutter/runtime/dart_vm.cc @@ -445,9 +445,6 @@ DartVM::DartVM(const std::shared_ptr& vm_data, TRACE_EVENT0("flutter", "Dart_Initialize"); Dart_InitializeParams params = {}; params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; - params.vm_snapshot_data = vm_data_->GetVMSnapshot().GetDataMapping(); - params.vm_snapshot_instructions = - vm_data_->GetVMSnapshot().GetInstructionsMapping(); params.create_group = reinterpret_cast( DartIsolate::DartIsolateGroupCreateCallback); params.initialize_isolate = diff --git a/engine/src/flutter/shell/platform/embedder/embedder.cc b/engine/src/flutter/shell/platform/embedder/embedder.cc index 5c5e2dc73ebde..589d5014eee0b 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder.cc +++ b/engine/src/flutter/shell/platform/embedder/embedder.cc @@ -1739,15 +1739,17 @@ FlutterEngineResult FlutterEngineCreateAOTData( // Dart doesn't implement Dart_LoadELF on Fuchsia Dart_LoadedElf* loaded_elf = nullptr; #else - Dart_LoadedElf* loaded_elf = Dart_LoadELF( - source->elf_path, // file path - 0, // file offset - &error, // error (out) - &aot_data->vm_snapshot_data, // vm snapshot data (out) - &aot_data->vm_snapshot_instrs, // vm snapshot instr (out) - &aot_data->vm_isolate_data, // vm isolate data (out) - &aot_data->vm_isolate_instrs // vm isolate instr (out) - ); + Dart_LoadedElf* loaded_elf = + Dart_LoadELF2(source->elf_path, // file path + 0, // file offset + &error, // error (out) + &aot_data->vm_isolate_data, // vm isolate data (out) + &aot_data->vm_isolate_instrs // vm isolate instr (out) + ); + if (loaded_elf != nullptr) { + aot_data->vm_snapshot_data = aot_data->vm_isolate_data; + aot_data->vm_snapshot_instrs = aot_data->vm_isolate_instrs; + } #endif if (loaded_elf == nullptr) { diff --git a/engine/src/flutter/shell/platform/embedder/embedder_exports.lst b/engine/src/flutter/shell/platform/embedder/embedder_exports.lst index d5755ed5c5724..cb5b33f8cd4a1 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder_exports.lst +++ b/engine/src/flutter/shell/platform/embedder/embedder_exports.lst @@ -9,10 +9,8 @@ Flutter*; __Flutter*; kFlutter*; - kDartIsolateSnapshotData; - kDartIsolateSnapshotInstructions; - kDartVmSnapshotData; - kDartVmSnapshotInstructions; + kDartSnapshotData; + kDartSnapshotText; InternalFlutterGpu*; kInternalFlutterGpu*; local: diff --git a/engine/src/flutter/shell/platform/fuchsia/dart_runner/BUILD.gn b/engine/src/flutter/shell/platform/fuchsia/dart_runner/BUILD.gn index 489c52a80f5ec..ce34699a3bf4e 100644 --- a/engine/src/flutter/shell/platform/fuchsia/dart_runner/BUILD.gn +++ b/engine/src/flutter/shell/platform/fuchsia/dart_runner/BUILD.gn @@ -139,7 +139,6 @@ runner("dart_aot_runner_bin") { extra_deps = [ "$dart_src/runtime:libdart_aotruntime", "$dart_src/runtime/platform:libdart_platform_aotruntime", - "embedder:dart_aot_snapshot_cc", ] } @@ -153,7 +152,6 @@ runner("dart_aot_product_runner_bin") { extra_deps = [ "$dart_src/runtime:libdart_aotruntime", "$dart_src/runtime/platform:libdart_platform_aotruntime", - "embedder:dart_aot_product_snapshot_cc", ] } diff --git a/engine/src/flutter/shell/platform/fuchsia/dart_runner/dart_runner.cc b/engine/src/flutter/shell/platform/fuchsia/dart_runner/dart_runner.cc index d9ac64fdc381d..6079b9b3c0bd7 100644 --- a/engine/src/flutter/shell/platform/fuchsia/dart_runner/dart_runner.cc +++ b/engine/src/flutter/shell/platform/fuchsia/dart_runner/dart_runner.cc @@ -27,11 +27,6 @@ #include "third_party/tonic/dart_microtask_queue.h" #include "third_party/tonic/dart_state.h" -#if defined(AOT_RUNTIME) -extern "C" uint8_t _kDartVmSnapshotData[]; -extern "C" uint8_t _kDartVmSnapshotInstructions[]; -#endif - namespace dart_runner { namespace { @@ -214,16 +209,6 @@ DartRunner::DartRunner(sys::ComponentContext* context) : context_(context) { Dart_InitializeParams params = {}; params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; -#if defined(AOT_RUNTIME) - params.vm_snapshot_data = ::_kDartVmSnapshotData; - params.vm_snapshot_instructions = ::_kDartVmSnapshotInstructions; -#else - if (!dart_utils::MappedResource::LoadFromNamespace( - nullptr, "/pkg/data/vm_snapshot_data.bin", vm_snapshot_data_)) { - FML_LOG(FATAL) << "Failed to load vm snapshot data"; - } - params.vm_snapshot_data = vm_snapshot_data_.address(); -#endif params.create_group = IsolateGroupCreateCallback; params.shutdown_isolate = IsolateShutdownCallback; params.cleanup_group = IsolateGroupCleanupCallback; diff --git a/engine/src/flutter/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn b/engine/src/flutter/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn index eb7e0562fbd16..a0bbd2b4a8b36 100644 --- a/engine/src/flutter/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn +++ b/engine/src/flutter/shell/platform/fuchsia/dart_runner/embedder/BUILD.gn @@ -20,60 +20,3 @@ dart_kernel("shim_product_kernel") { product = true aot = true } - -template("create_aot_snapshot") { - assert(defined(invoker.product), "The parameter 'product' must be defined") - product_suffix = "" - if (invoker.product) { - product_suffix = "_product" - } - compiled_action("${target_name}_assembly") { - snapshot_assembly = "$target_gen_dir/aot${product_suffix}_vm_snapshot.S" - - # gen_snapshot only needs this to go through the motions of setting up an isolate. - shim_target = ":shim${product_suffix}_kernel($host_toolchain)" - shim_kernel = get_label_info(shim_target, "target_gen_dir") + - "/shim${product_suffix}_kernel.dill" - - inputs = [ shim_kernel ] - outputs = [ snapshot_assembly ] - - deps = [ shim_target ] - if (invoker.product) { - tool = gen_snapshot_product - } else { - tool = gen_snapshot - } - - args = [ - "--deterministic", - "--snapshot_kind=vm-aot-assembly", - "--assembly=" + rebase_path(snapshot_assembly), - ] - - # No asserts in debug or release product. - # No asserts in release with flutter_profile=true (non-product) - # Yes asserts in non-product debug. - if (!invoker.product && (flutter_runtime_mode == "debug" || is_debug)) { - args += [ "--enable_asserts" ] - } - args += [ rebase_path(shim_kernel) ] - } - - source_set(target_name) { - deps = [ ":${target_name}_assembly" ] - - sources = [ - "$target_gen_dir/aot${product_suffix}_vm_snapshot.S", - "snapshot.h", - ] - } -} - -create_aot_snapshot("dart_aot_snapshot_cc") { - product = false -} - -create_aot_snapshot("dart_aot_product_snapshot_cc") { - product = true -} diff --git a/engine/src/flutter/shell/platform/fuchsia/dart_runner/kernel/BUILD.gn b/engine/src/flutter/shell/platform/fuchsia/dart_runner/kernel/BUILD.gn index 64abc2f63d27f..045ab13ec69f6 100644 --- a/engine/src/flutter/shell/platform/fuchsia/dart_runner/kernel/BUILD.gn +++ b/engine/src/flutter/shell/platform/fuchsia/dart_runner/kernel/BUILD.gn @@ -26,6 +26,15 @@ compile_platform("kernel_platform_files") { ] } +generated_file("vm_data") { + contents = "" + outputs = [ "$target_gen_dir/vm_data.bin" ] +} +generated_file("vm_data_product") { + contents = "" + outputs = [ "$target_gen_dir/vm_data_product.bin" ] +} + template("create_kernel_core_snapshot") { assert(defined(invoker.product), "The parameter 'product' must be defined") product_suffix = "" @@ -35,16 +44,17 @@ template("create_kernel_core_snapshot") { compiled_action(target_name) { deps = [ ":kernel_platform_files" ] + public_deps = [ ":vm_data${product_suffix}" ] platform_dill = "$root_out_dir/dart_runner_patched_sdk/platform_strong.dill" inputs = [ platform_dill ] - vm_snapshot_data = "$target_gen_dir/vm_data${product_suffix}.bin" - isolate_snapshot_data = "$target_gen_dir/isolate_data${product_suffix}.bin" + snapshot_data = "$target_gen_dir/isolate_data${product_suffix}.bin" + snapshot_text = "$target_gen_dir/isolate_text${product_suffix}.bin" snapshot_profile = "$target_gen_dir/snapshot_profile${product_suffix}.json" outputs = [ - vm_snapshot_data, - isolate_snapshot_data, + snapshot_data, + snapshot_text, snapshot_profile, ] @@ -59,9 +69,8 @@ template("create_kernel_core_snapshot") { "--enable_mirrors=false", "--deterministic", "--snapshot_kind=core", - "--vm_snapshot_data=" + rebase_path(vm_snapshot_data, root_build_dir), - "--isolate_snapshot_data=" + - rebase_path(isolate_snapshot_data, root_build_dir), + "--snapshot_data=" + rebase_path(snapshot_data, root_build_dir), + "--snapshot_text=" + rebase_path(snapshot_text, root_build_dir), "--write_v8_snapshot_profile_to=" + rebase_path(snapshot_profile, root_build_dir), ] diff --git a/engine/src/flutter/shell/platform/fuchsia/flutter/kernel/BUILD.gn b/engine/src/flutter/shell/platform/fuchsia/flutter/kernel/BUILD.gn index dd6a53704ca20..4f2d720ee7e42 100644 --- a/engine/src/flutter/shell/platform/fuchsia/flutter/kernel/BUILD.gn +++ b/engine/src/flutter/shell/platform/fuchsia/flutter/kernel/BUILD.gn @@ -26,6 +26,15 @@ compile_platform("kernel_platform_files") { ] } +generated_file("vm_isolate_snapshot") { + contents = "" + outputs = [ "$target_gen_dir/vm_isolate_snapshot.bin" ] +} +generated_file("vm_isolate_snapshot_product") { + contents = "" + outputs = [ "$target_gen_dir/vm_isolate_snapshot_product.bin" ] +} + template("core_snapshot") { assert(defined(invoker.product), "core_snapshot requires 'product' to be defined") @@ -38,17 +47,18 @@ template("core_snapshot") { compiled_action(target_name) { deps = [ ":kernel_platform_files" ] + public_deps = [ ":vm_isolate_snapshot$suffix" ] platform_dill = "$root_out_dir/flutter_runner_patched_sdk/platform_strong.dill" inputs = [ platform_dill ] - vm_snapshot_data = "$target_gen_dir/vm_isolate_snapshot${suffix}.bin" - isolate_snapshot_data = "$target_gen_dir/isolate_snapshot${suffix}.bin" + snapshot_data = "$target_gen_dir/isolate_snapshot${suffix}.bin" + snapshot_text = "$target_gen_dir/isolate_snapshot_text${suffix}.bin" snapshot_profile = "$target_gen_dir/snapshot_profile${suffix}.json" outputs = [ - vm_snapshot_data, - isolate_snapshot_data, + snapshot_data, + snapshot_text, snapshot_profile, ] @@ -63,9 +73,8 @@ template("core_snapshot") { "--enable_mirrors=false", "--deterministic", "--snapshot_kind=core", - "--vm_snapshot_data=" + rebase_path(vm_snapshot_data, root_build_dir), - "--isolate_snapshot_data=" + - rebase_path(isolate_snapshot_data, root_build_dir), + "--snapshot_data=" + rebase_path(snapshot_data, root_build_dir), + "--snapshot_text=" + rebase_path(snapshot_text, root_build_dir), "--write_v8_snapshot_profile_to=" + rebase_path(snapshot_profile, root_build_dir), ] diff --git a/engine/src/flutter/shell/platform/fuchsia/runtime/dart/utils/mapped_resource.cc b/engine/src/flutter/shell/platform/fuchsia/runtime/dart/utils/mapped_resource.cc index 78317ef59567f..9c5580ef14501 100644 --- a/engine/src/flutter/shell/platform/fuchsia/runtime/dart/utils/mapped_resource.cc +++ b/engine/src/flutter/shell/platform/fuchsia/runtime/dart/utils/mapped_resource.cc @@ -156,13 +156,13 @@ bool ElfSnapshot::Load(const fml::UniqueFD& fd) { } vm_data_ = - reinterpret_cast(dlsym(handle_, kVmSnapshotDataCSymbol)); - vm_instrs_ = reinterpret_cast( - dlsym(handle_, kVmSnapshotInstructionsCSymbol)); - isolate_data_ = reinterpret_cast( - dlsym(handle_, kIsolateSnapshotDataCSymbol)); - isolate_instrs_ = reinterpret_cast( - dlsym(handle_, kIsolateSnapshotInstructionsCSymbol)); + reinterpret_cast(dlsym(handle_, kSnapshotDataCSymbol)); + vm_instrs_ = + reinterpret_cast(dlsym(handle_, kSnapshotTextCSymbol)); + isolate_data_ = + reinterpret_cast(dlsym(handle_, kSnapshotDataCSymbol)); + isolate_instrs_ = + reinterpret_cast(dlsym(handle_, kSnapshotTextCSymbol)); if (vm_data_ == nullptr || vm_instrs_ == nullptr || isolate_data_ == nullptr || isolate_instrs_ == nullptr) { FML_LOG(ERROR) << "Failed to load ELF symbols"; diff --git a/engine/src/flutter/testing/elf_loader.cc b/engine/src/flutter/testing/elf_loader.cc index d7cff00b060fa..b2033eb873b11 100644 --- a/engine/src/flutter/testing/elf_loader.cc +++ b/engine/src/flutter/testing/elf_loader.cc @@ -39,14 +39,16 @@ ELFAOTSymbols LoadELFSymbolFromFixturesIfNeccessary(std::string elf_filename) { const char* error = nullptr; auto loaded_elf = - Dart_LoadELF(elf_path.c_str(), // file path - 0, // file offset - &error, // error (out) - &symbols.vm_snapshot_data, // vm snapshot data (out) - &symbols.vm_snapshot_instrs, // vm snapshot instrs (out) - &symbols.vm_isolate_data, // vm isolate data (out) - &symbols.vm_isolate_instrs // vm isolate instr (out) + Dart_LoadELF2(elf_path.c_str(), // file path + 0, // file offset + &error, // error (out) + &symbols.vm_isolate_data, // vm isolate data (out) + &symbols.vm_isolate_instrs // vm isolate instr (out) ); + if (loaded_elf != nullptr) { + symbols.vm_snapshot_data = symbols.vm_isolate_data; + symbols.vm_snapshot_instrs = symbols.vm_isolate_instrs; + } if (loaded_elf == nullptr) { FML_LOG(ERROR) @@ -89,14 +91,16 @@ ELFAOTSymbols LoadELFSplitSymbolFromFixturesIfNeccessary( const char* error = nullptr; auto loaded_elf = - Dart_LoadELF(elf_path.c_str(), // file path - 0, // file offset - &error, // error (out) - &symbols.vm_snapshot_data, // vm snapshot data (out) - &symbols.vm_snapshot_instrs, // vm snapshot instrs (out) - &symbols.vm_isolate_data, // vm isolate data (out) - &symbols.vm_isolate_instrs // vm isolate instr (out) + Dart_LoadELF2(elf_path.c_str(), // file path + 0, // file offset + &error, // error (out) + &symbols.vm_isolate_data, // vm isolate data (out) + &symbols.vm_isolate_instrs // vm isolate instr (out) ); + if (loaded_elf != nullptr) { + symbols.vm_snapshot_data = symbols.vm_isolate_data; + symbols.vm_snapshot_instrs = symbols.vm_isolate_instrs; + } if (loaded_elf == nullptr) { FML_LOG(ERROR)