Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3655)

Unified Diff: runtime/bin/main.cc

Issue 2572423004: Reapply "Save and restore feedback from JIT." (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/bin/main.cc
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 28804f4a1b6deccf32c39e52e95fbbe3a5cd4882..5b90c03f2994f898263fdf56b4e865987a2f4fb4 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -65,6 +65,16 @@ static bool use_dart_frontend = false;
static const char* frontend_filename = NULL;
+// Value of the --save-feedback flag.
+// (This pointer points into an argv buffer and does not need to be
+// free'd.)
+static const char* save_feedback_filename = NULL;
+
+// Value of the --load-feedback flag.
+// (This pointer points into an argv buffer and does not need to be
+// free'd.)
+static const char* load_feedback_filename = NULL;
+
// Value of the --package-root flag.
// (This pointer points into an argv buffer and does not need to be
// free'd.)
@@ -221,6 +231,28 @@ static bool ProcessPackagesOption(const char* arg,
}
+static bool ProcessSaveFeedbackOption(const char* arg,
+ CommandLineOptions* vm_options) {
+ ASSERT(arg != NULL);
+ if (*arg == '-') {
+ return false;
+ }
+ save_feedback_filename = arg;
+ return true;
+}
+
+
+static bool ProcessLoadFeedbackOption(const char* arg,
+ CommandLineOptions* vm_options) {
+ ASSERT(arg != NULL);
+ if (*arg == '-') {
+ return false;
+ }
+ load_feedback_filename = arg;
+ return true;
+}
+
+
static void* GetHashmapKeyFromString(char* key) {
return reinterpret_cast<void*>(key);
}
@@ -564,6 +596,8 @@ static struct {
{"--snapshot=", ProcessSnapshotFilenameOption},
{"--snapshot-kind=", ProcessSnapshotKindOption},
{"--use-blobs", ProcessUseBlobsOption},
+ {"--save-feedback=", ProcessSaveFeedbackOption},
+ {"--load-feedback=", ProcessLoadFeedbackOption},
{"--trace-loading", ProcessTraceLoadingOption},
{"--hot-reload-test-mode", ProcessHotReloadTestModeOption},
{"--hot-reload-rollback-test-mode", ProcessHotReloadRollbackTestModeOption},
@@ -1497,7 +1531,7 @@ static void GeneratePrecompiledSnapshot() {
#if defined(TARGET_ARCH_X64)
-static void GeneratePrecompiledJITSnapshot() {
+static void GenerateAppJITSnapshot() {
uint8_t* vm_isolate_buffer = NULL;
intptr_t vm_isolate_size = 0;
uint8_t* isolate_buffer = NULL;
@@ -1528,7 +1562,7 @@ static void GenerateAppSnapshot() {
if (Dart_IsError(result)) {
ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
}
- GeneratePrecompiledJITSnapshot();
+ GenerateAppJITSnapshot();
#else
// Create an application snapshot of the script.
uint8_t* vm_isolate_buffer = NULL;
@@ -1687,8 +1721,27 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) {
{NULL, NULL, NULL} // Must be terminated with NULL entries.
};
+ uint8_t* feedback_buffer = NULL;
+ intptr_t feedback_length = 0;
+ if (load_feedback_filename != NULL) {
+ File* file = File::Open(load_feedback_filename, File::kRead);
+ if (file == NULL) {
+ ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n");
+ }
+ feedback_length = file->Length();
+ feedback_buffer = reinterpret_cast<uint8_t*>(malloc(feedback_length));
+ if (!file->ReadFully(feedback_buffer, feedback_length)) {
+ ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n");
+ }
+ file->Release();
+ }
+
const bool reset_fields = gen_snapshot_kind == kAppAOT;
- result = Dart_Precompile(standalone_entry_points, reset_fields);
+ result = Dart_Precompile(standalone_entry_points, reset_fields,
+ feedback_buffer, feedback_length);
+ if (feedback_buffer != NULL) {
+ free(feedback_buffer);
+ }
CHECK_RESULT(result);
}
@@ -1732,6 +1785,16 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) {
}
}
CHECK_RESULT(result);
+
+ if (save_feedback_filename != NULL) {
+ uint8_t* buffer = NULL;
+ intptr_t size = 0;
+ result = Dart_SaveJITFeedback(&buffer, &size);
+ if (Dart_IsError(result)) {
+ ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
+ }
+ WriteSnapshotFile(save_feedback_filename, false, buffer, size);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698