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

Unified Diff: runtime/bin/main.cc

Issue 11428067: Merge the Merlin heap tracing to top-of-trunk. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: add yet another missing file Created 8 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
« no previous file with comments | « no previous file | runtime/include/dart_api.h » ('j') | runtime/include/dart_api.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/main.cc
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 7505ad1c252bce5910c4c79fb80b5ffddbb201a5..5e72cc3ee2d574504dc099ac9a5652d9a0d1ed1a 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -32,6 +32,15 @@ extern const uint8_t* snapshot_buffer;
static File* perf_events_symbols_file = NULL;
+// Global state that indicates whether heap tracing is on.
+static bool heap_trace = false;
+
+
+// Global state that indicates the file name prefix to use for heap
+// trace output files.
+static const char* heap_trace_file_prefix = "dart_heap_trace";
+
+
// Global state that indicates whether pprof symbol information is
// to be generated or not.
static const char* generate_pprof_symbols_filename = NULL;
@@ -180,6 +189,20 @@ static bool ProcessPprofOption(const char* filename) {
}
+static bool ProcessHeapTraceOption(const char* heap_trace_option) {
+ heap_trace = true;
+ return true;
+}
+
+
+static bool ProcessHeapTraceFilePrefixOption(
+ const char* heap_trace_file_prefix_option) {
+ ASSERT(heap_trace_file_prefix_option != NULL);
+ heap_trace_file_prefix = heap_trace_file_prefix_option;
+ return true;
+}
+
+
static bool ProcessScriptSnapshotOption(const char* filename) {
if (filename != NULL && strlen(filename) != 0) {
use_script_snapshot = true;
@@ -207,6 +230,8 @@ static struct {
{ "--debug", ProcessDebugOption },
{ "--generate_perf_events_symbols", ProcessPerfEventsOption },
{ "--generate_pprof_symbols=", ProcessPprofOption },
+ { "--heap_trace", ProcessHeapTraceOption },
+ { "--heap_trace_file_prefix=", ProcessHeapTraceFilePrefixOption },
{ "--use_script_snapshot=", ProcessScriptSnapshotOption },
{ NULL, NULL }
};
@@ -232,6 +257,34 @@ static void WriteToPerfEventsFile(const char* buffer, int64_t num_bytes) {
perf_events_symbols_file->WriteFully(buffer, num_bytes);
}
+
+// This function used by the heap trace to open new trace files, one
+// file per isolate.
+static void* OpenHeapTraceFile(const char* name) {
+ File* file = File::Open(name, File::kWriteTruncate);
+ ASSERT(file != NULL);
+ return reinterpret_cast<void*>(file);
+}
+
+
+// Function used by the heap trace to write to trace files.
+static void WriteToHeapTraceFile(const void* buffer,
+ intptr_t num_bytes,
+ void* stream) {
+ ASSERT(stream != NULL);
+ File* file_stream = reinterpret_cast<File*>(stream);
+ bool bytes_written = file_stream->WriteFully(buffer, num_bytes);
+ ASSERT(bytes_written);
+}
+
+
+// Function used by the heap trace to close trace files.
+static void CloseHeapTraceFile(void* stream) {
+ File* file_stream = reinterpret_cast<File*>(stream);
+ delete file_stream; // Closes the file.
+}
+
+
// Convert all the arguments to UTF8. On Windows, the arguments are
// encoded in the current code page and not UTF8.
//
@@ -298,6 +351,13 @@ static int ParseArguments(int argc,
Dart_InitPprofSupport();
}
+ if (heap_trace) {
+ Dart_InitHeapTrace(&OpenHeapTraceFile,
+ &WriteToHeapTraceFile,
+ &CloseHeapTraceFile,
+ heap_trace_file_prefix);
+ }
+
// Get the script name.
if (i < argc) {
*script_name = argv[i];
« no previous file with comments | « no previous file | runtime/include/dart_api.h » ('j') | runtime/include/dart_api.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698