Index: runtime/vm/benchmark_test.cc |
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc |
index a6d6c18286211626e747c8248d6faa920c2f7250..7f51ac41b6c875b2da1ee6b5f648734b2a46ee30 100644 |
--- a/runtime/vm/benchmark_test.cc |
+++ b/runtime/vm/benchmark_test.cc |
@@ -258,6 +258,68 @@ static void func(Dart_NativeArguments args) { |
} |
+// Emulates DartUtils::PrepareForScriptLoading. |
+static Dart_Handle PreparePackageRoot(const char* package_root, |
+ Dart_Handle builtin_lib) { |
+ // First ensure all required libraries are available. |
+ Dart_Handle url = NewString(bin::DartUtils::kCoreLibURL); |
+ DART_CHECK_VALID(url); |
+ Dart_Handle core_lib = Dart_LookupLibrary(url); |
+ DART_CHECK_VALID(core_lib); |
+ url = NewString(bin::DartUtils::kAsyncLibURL); |
+ DART_CHECK_VALID(url); |
+ Dart_Handle async_lib = Dart_LookupLibrary(url); |
+ DART_CHECK_VALID(async_lib); |
+ url = NewString(bin::DartUtils::kIsolateLibURL); |
+ DART_CHECK_VALID(url); |
+ Dart_Handle isolate_lib = Dart_LookupLibrary(url); |
+ DART_CHECK_VALID(isolate_lib); |
+ url = NewString(bin::DartUtils::kInternalLibURL); |
+ DART_CHECK_VALID(url); |
+ Dart_Handle internal_lib = Dart_LookupLibrary(url); |
+ DART_CHECK_VALID(internal_lib); |
+ Dart_Handle io_lib = |
+ bin::Builtin::LoadAndCheckLibrary(bin::Builtin::kIOLibrary); |
+ DART_CHECK_VALID(io_lib); |
+ |
+ // We need to ensure that all the scripts loaded so far are finalized |
+ // as we are about to invoke some Dart code below to setup closures. |
+ Dart_Handle result = Dart_FinalizeLoading(false); |
+ DART_CHECK_VALID(result); |
+ |
+ // Necessary parts from PrepareBuiltinLibrary. |
+ // Setup the internal library's 'internalPrint' function. |
+ result = Dart_Invoke(builtin_lib, NewString("_getPrintClosure"), 0, NULL); |
+ DART_CHECK_VALID(result); |
+ result = Dart_SetField(internal_lib, NewString("_printClosure"), result); |
+ DART_CHECK_VALID(result); |
+#if defined(TARGET_OS_WINDOWS) |
+ result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True()); |
+ DART_CHECK_VALID(result); |
+#endif // defined(TARGET_OS_WINDOWS) |
+ // Set current working directory. |
+ result = bin::DartUtils::SetWorkingDirectory(builtin_lib); |
+ DART_CHECK_VALID(result); |
+ // Set the package root for builtin.dart. |
+ result = NewString(package_root); |
+ DART_CHECK_VALID(result); |
+ const int kNumArgs = 1; |
+ Dart_Handle dart_args[kNumArgs]; |
+ dart_args[0] = result; |
+ result = Dart_Invoke(builtin_lib, |
+ NewString("_setPackageRoot"), |
+ kNumArgs, |
+ dart_args); |
+ DART_CHECK_VALID(result); |
+ |
+ bin::DartUtils::PrepareAsyncLibrary(async_lib, isolate_lib); |
+ bin::DartUtils::PrepareCoreLibrary(core_lib, builtin_lib, false); |
+ bin::DartUtils::PrepareIsolateLibrary(isolate_lib); |
+ bin::DartUtils::PrepareIOLibrary(io_lib); |
+ return Dart_True(); |
+} |
+ |
+ |
static Dart_NativeFunction NativeResolver(Dart_Handle name, |
int arg_count, |
bool* auto_setup_scope) { |
@@ -280,7 +342,8 @@ static void SetupDart2JSPackagePath() { |
const char* path_separator = File::PathSeparator(); |
OS::SNPrint(buffer, 2048, packages_path, |
executable_path, path_separator, path_separator); |
- bin::DartUtils::PrepareForScriptLoading(buffer, false, false, builtin_lib); |
+ Dart_Handle result = PreparePackageRoot(buffer, builtin_lib); |
+ DART_CHECK_VALID(result); |
} |
BENCHMARK(Dart2JSCompileAll) { |