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

Unified Diff: runtime/vm/isolate.cc

Issue 1170503004: Initial Timeline Events (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 months 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 | « runtime/vm/isolate.h ('k') | runtime/vm/json_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/isolate.cc
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 588cd2d7f7acf40f7eb6276a3c5fdd67ad54582d..4ad066786a7fd183f37a53a51cab0cb8813290c3 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -35,6 +35,7 @@
#include "vm/symbols.h"
#include "vm/tags.h"
#include "vm/thread_interrupter.h"
+#include "vm/timeline.h"
#include "vm/timer.h"
#include "vm/visitor.h"
@@ -54,6 +55,10 @@ DEFINE_FLAG(charp, isolate_log_filter, NULL,
"Log isolates whose name include the filter. "
"Default: service isolate log messages are suppressed.");
+DEFINE_FLAG(charp, timeline_trace_dir, NULL,
+ "Enable all timeline trace streams and output traces "
+ "into specified directory.");
+
// TODO(iposva): Make these isolate specific flags inaccessible using the
// regular FLAG_xyz pattern.
// These flags are per-isolate and only influence the defaults.
@@ -368,6 +373,8 @@ void IsolateMessageHandler::MessageNotify(Message::Priority priority) {
bool IsolateMessageHandler::HandleMessage(Message* message) {
StackZone zone(I);
HandleScope handle_scope(I);
+ TimelineDurationScope tds(I, I->GetIsolateStream(), "HandleMessage");
+
// TODO(turnidge): Rework collection total dart execution. This can
// overcount when other things (gc, compilation) are active.
TIMERSCOPE(isolate_, time_dart_execution);
@@ -662,6 +669,7 @@ Isolate::Isolate(const Dart_IsolateFlags& api_flags)
last_allocationprofile_gc_timestamp_(0),
object_id_ring_(NULL),
trace_buffer_(NULL),
+ timeline_event_buffer_(NULL),
profiler_data_(NULL),
thread_state_(NULL),
tag_table_(GrowableObjectArray::null()),
@@ -710,6 +718,7 @@ Isolate::~Isolate() {
delete compiler_stats_;
compiler_stats_ = NULL;
}
+ RemoveTimelineEventBuffer();
}
@@ -739,6 +748,15 @@ Isolate* Isolate::Init(const char* name_prefix,
ISOLATE_METRIC_LIST(ISOLATE_METRIC_INIT);
#undef ISOLATE_METRIC_INIT
+ const bool force_streams = FLAG_timeline_trace_dir != NULL;
+
+ // Initialize Timeline streams.
+#define ISOLATE_TIMELINE_STREAM_INIT(name, enabled_by_default) \
+ result->stream_##name##_.Init(#name, force_streams || enabled_by_default);
+ ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_INIT);
+#undef ISOLATE_TIMELINE_STREAM_INIT
+
+
// TODO(5411455): For now just set the recently created isolate as
// the current isolate.
Thread::EnterIsolate(result);
@@ -963,6 +981,12 @@ bool Isolate::MakeRunnable() {
ASSERT(this == state->isolate());
Run();
}
+ TimelineStream* stream = GetIsolateStream();
+ ASSERT(stream != NULL);
+ TimelineEvent* event = stream->RecordEvent();
+ if (event != NULL) {
+ event->Instant(stream, "Runnable");
+ }
return true;
}
@@ -1452,6 +1476,10 @@ void Isolate::Shutdown() {
OS::Print("[-] Stopping isolate:\n"
"\tisolate: %s\n", name());
}
+
+ if ((timeline_event_buffer_ != NULL) && (FLAG_timeline_trace_dir != NULL)) {
+ timeline_event_buffer_->WriteTo(FLAG_timeline_trace_dir);
+ }
}
// TODO(5411455): For now just make sure there are no current isolates
@@ -1550,6 +1578,21 @@ void Isolate::VisitPrologueWeakPersistentHandles(HandleVisitor* visitor) {
}
+void Isolate::SetTimelineEventBuffer(
+ TimelineEventBuffer* timeline_event_buffer) {
+#define ISOLATE_TIMELINE_STREAM_SET_BUFFER(name, enabled_by_default) \
+ stream_##name##_.set_buffer(timeline_event_buffer);
+ ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_SET_BUFFER)
+#undef ISOLATE_TIMELINE_STREAM_SET_BUFFER
+ timeline_event_buffer_ = timeline_event_buffer;
+}
+
+void Isolate::RemoveTimelineEventBuffer() {
+ SetTimelineEventBuffer(NULL);
+ delete timeline_event_buffer_;
+}
+
+
void Isolate::PrintJSON(JSONStream* stream, bool ref) {
JSONObject jsobj(stream);
jsobj.AddProperty("type", (ref ? "@Isolate" : "Isolate"));
« no previous file with comments | « runtime/vm/isolate.h ('k') | runtime/vm/json_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698