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

Unified Diff: runtime/vm/timeline.cc

Issue 1406413006: Timeline service protocol support with Observatory UI (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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/timeline.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/timeline.cc
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index 62a9b2289d1adcc8412f3852776735a782fe6154..d8407670acaef205d6764a114ec95cb0a5b94e40 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -84,7 +84,7 @@ void Timeline::InitOnce() {
vm_stream_->Init("VM", EnableStreamByDefault("VM"), NULL);
// Global overrides.
#define ISOLATE_TIMELINE_STREAM_FLAG_DEFAULT(name, not_used) \
- stream_##name##_enabled_ = false;
+ stream_##name##_enabled_ = EnableStreamByDefault(#name);
ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_FLAG_DEFAULT)
#undef ISOLATE_TIMELINE_STREAM_FLAG_DEFAULT
}
@@ -109,7 +109,7 @@ TimelineEventRecorder* Timeline::recorder() {
bool Timeline::EnableStreamByDefault(const char* stream_name) {
// TODO(johnmccutchan): Allow for command line control over streams.
- return (FLAG_timeline_dir != NULL) || FLAG_timing;
+ return (FLAG_timeline_dir != NULL) || FLAG_timing || FLAG_complete_timeline;
}
@@ -141,11 +141,21 @@ void Timeline::ReclaimCachedBlocksFromThreads() {
}
+void Timeline::Clear() {
+ TimelineEventRecorder* recorder = Timeline::recorder();
+ if (recorder == NULL) {
+ return;
+ }
+ ReclaimCachedBlocksFromThreads();
+ recorder->Clear();
+}
+
+
TimelineEventRecorder* Timeline::recorder_ = NULL;
TimelineStream* Timeline::vm_stream_ = NULL;
#define ISOLATE_TIMELINE_STREAM_DEFINE_FLAG(name, enabled_by_default) \
- bool Timeline::stream_##name##_enabled_ = false;
+ bool Timeline::stream_##name##_enabled_ = enabled_by_default;
ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_DEFINE_FLAG)
#undef ISOLATE_TIMELINE_STREAM_DEFINE_FLAG
@@ -631,6 +641,26 @@ TimelineEventRecorder::TimelineEventRecorder()
void TimelineEventRecorder::PrintJSONMeta(JSONArray* events) const {
+ ThreadIterator it;
+ while (it.HasNext()) {
+ Thread* thread = it.Next();
+ const char* thread_name = thread->name();
+ if (thread_name == NULL) {
+ // Only emit a thread name if one was set.
+ continue;
+ }
+ JSONObject obj(events);
+ int64_t pid = OS::ProcessId();
+ int64_t tid = OSThread::ThreadIdToIntPtr(thread->trace_id());
+ obj.AddProperty("name", "thread_name");
+ obj.AddProperty("ph", "M");
+ obj.AddProperty64("pid", pid);
+ obj.AddProperty64("tid", tid);
+ {
+ JSONObject args(&obj, "args");
+ args.AddPropertyF("name", "%s (%" Pd64 ")", thread_name, tid);
+ }
+ }
}
@@ -783,7 +813,8 @@ TimelineEventRingRecorder::~TimelineEventRingRecorder() {
void TimelineEventRingRecorder::PrintJSONEvents(
JSONArray* events,
- TimelineEventFilter* filter) const {
+ TimelineEventFilter* filter) {
+ MutexLocker ml(&lock_);
intptr_t block_offset = FindOldestBlockIndex();
if (block_offset == -1) {
// All blocks are empty.
@@ -807,7 +838,6 @@ void TimelineEventRingRecorder::PrintJSONEvents(
void TimelineEventRingRecorder::PrintJSON(JSONStream* js,
TimelineEventFilter* filter) {
- MutexLocker ml(&lock_);
JSONObject topLevel(js);
topLevel.AddProperty("type", "_Timeline");
{
@@ -843,6 +873,15 @@ TimelineEventBlock* TimelineEventRingRecorder::GetNewBlockLocked() {
}
+void TimelineEventRingRecorder::Clear() {
+ MutexLocker ml(&lock_);
+ for (intptr_t i = 0; i < num_blocks_; i++) {
+ TimelineEventBlock* block = blocks_[i];
+ block->Reset();
+ }
+}
+
+
intptr_t TimelineEventRingRecorder::FindOldestBlockIndex() const {
int64_t earliest_time = kMaxInt64;
intptr_t earliest_index = -1;
@@ -923,7 +962,6 @@ TimelineEventEndlessRecorder::TimelineEventEndlessRecorder()
void TimelineEventEndlessRecorder::PrintJSON(JSONStream* js,
TimelineEventFilter* filter) {
- MutexLocker ml(&lock_);
JSONObject topLevel(js);
topLevel.AddProperty("type", "_Timeline");
{
@@ -977,9 +1015,9 @@ TimelineEventBlock* TimelineEventEndlessRecorder::GetNewBlockLocked() {
void TimelineEventEndlessRecorder::PrintJSONEvents(
JSONArray* events,
- TimelineEventFilter* filter) const {
+ TimelineEventFilter* filter) {
+ MutexLocker ml(&lock_);
TimelineEventBlock* current = head_;
-
while (current != NULL) {
if (!filter->IncludeBlock(current)) {
current = current->next();
« no previous file with comments | « runtime/vm/timeline.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698