Index: src/d8.cc |
diff --git a/src/d8.cc b/src/d8.cc |
index 611b3b570b1a4448cf5feae7dd13174e3934e289..ec741b13f466bc22a07ff25c827f415df8dbbe94 100644 |
--- a/src/d8.cc |
+++ b/src/d8.cc |
@@ -35,6 +35,7 @@ |
#include "src/ostreams.h" |
#include "include/libplatform/libplatform.h" |
+#include "include/libplatform/v8-tracing.h" |
#ifndef V8_SHARED |
#include "src/api.h" |
#include "src/base/cpu.h" |
@@ -1996,6 +1997,9 @@ bool Shell::SetOptions(int argc, char* argv[]) { |
return false; |
} |
argv[i] = NULL; |
+ } else if (strcmp(argv[i], "--enable-tracing") == 0) { |
+ options.trace_enabled = true; |
+ argv[i] = NULL; |
} |
} |
@@ -2412,6 +2416,7 @@ static void DumpHeapConstants(i::Isolate* isolate) { |
int Shell::Main(int argc, char* argv[]) { |
+ std::ofstream trace_file; |
#if (defined(_WIN32) || defined(_WIN64)) |
UINT new_flags = |
SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX; |
@@ -2479,6 +2484,29 @@ int Shell::Main(int argc, char* argv[]) { |
Initialize(isolate); |
PerIsolateData data(isolate); |
+ if (options.trace_enabled) { |
+ trace_file.open("v8_trace.json"); |
+ platform::tracing::TracingController* tracing_controller = |
+ new platform::tracing::TracingController(); |
+ platform::tracing::TraceBuffer* trace_buffer = |
+ platform::tracing::TraceBuffer::CreateTraceBufferRingBuffer( |
+ platform::tracing::TraceBuffer::kRingBufferChunks, |
+ platform::tracing::TraceWriter::CreateJSONTraceWriter( |
+ trace_file)); |
+ platform::tracing::TraceConfig* trace_config; |
+ trace_config = new platform::tracing::TraceConfig(); |
+ trace_config->AddIncludedCategory("v8"); |
+ tracing_controller->Initialize(trace_buffer); |
+ tracing_controller->StartTracing(trace_config); |
+#ifndef V8_SHARED |
+ if (!i::FLAG_verify_predictable) { |
+ platform::SetTracingController(g_platform, tracing_controller); |
+ } |
+#else |
+ platform::SetTracingController(g_platform, tracing_controller); |
+#endif |
+ } |
+ |
#ifndef V8_SHARED |
if (options.dump_heap_constants) { |
DumpHeapConstants(reinterpret_cast<i::Isolate*>(isolate)); |