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

Unified Diff: runtime/vm/timeline.cc

Issue 1296353002: Add --timing (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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/timeline.h ('k') | runtime/vm/timeline_analysis.h » ('j') | 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 ecdd085124b9e29788d0b591c5ed7b623dd22022..ac5545196e85a39d0a945077dc5da75d88596c5b 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -8,15 +8,20 @@
#include "vm/isolate.h"
#include "vm/json_stream.h"
#include "vm/lockers.h"
+#include "vm/log.h"
#include "vm/object.h"
#include "vm/thread.h"
#include "vm/timeline.h"
namespace dart {
-DEFINE_FLAG(bool, trace_timeline, false, "Trace timeline backend");
DEFINE_FLAG(bool, complete_timeline, false, "Record the complete timeline");
-
+DEFINE_FLAG(bool, trace_timeline, false,
+ "Trace timeline backend");
+DEFINE_FLAG(bool, trace_timeline_analysis, false,
+ "Trace timeline analysis backend");
+DEFINE_FLAG(bool, timing, false,
+ "Dump isolate timing information from timeline.");
DEFINE_FLAG(charp, timeline_dir, NULL,
"Enable all timeline trace streams and output VM global trace "
"into specified directory.");
@@ -26,7 +31,8 @@ void Timeline::InitOnce() {
// Default to ring recorder being enabled.
const bool use_ring_recorder = true;
// Some flags require that we use the endless recorder.
- const bool use_endless_recorder = (FLAG_timeline_dir != NULL);
+ const bool use_endless_recorder =
+ (FLAG_timeline_dir != NULL) || FLAG_timing;
if (use_endless_recorder) {
recorder_ = new TimelineEventEndlessRecorder();
} else if (use_ring_recorder) {
@@ -56,7 +62,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;
+ return (FLAG_timeline_dir != NULL) || FLAG_timing;
}
@@ -410,6 +416,10 @@ TimelineEvent* TimelineEventRecorder::ThreadBlockStartEvent() {
TimelineEvent* TimelineEventRecorder::GlobalBlockStartEvent() {
MutexLocker ml(&lock_);
+ if (FLAG_trace_timeline) {
+ OS::Print("GlobalBlockStartEvent in block %p for thread %" Px "\n",
+ global_block_, OSThread::CurrentCurrentThreadIdAsIntPtr());
+ }
if ((global_block_ != NULL) && global_block_->IsFull()) {
// Global block is full.
global_block_->Finish();
@@ -418,6 +428,7 @@ TimelineEvent* TimelineEventRecorder::GlobalBlockStartEvent() {
if (global_block_ == NULL) {
// Allocate a new block.
global_block_ = GetNewBlockLocked(NULL);
+ ASSERT(global_block_ != NULL);
}
if (global_block_ != NULL) {
ASSERT(!global_block_->IsFull());
@@ -632,7 +643,6 @@ void TimelineEventStreamingRecorder::CompleteEvent(TimelineEvent* event) {
TimelineEventEndlessRecorder::TimelineEventEndlessRecorder()
: head_(NULL),
block_index_(0) {
- GetNewBlock();
}
@@ -670,6 +680,14 @@ TimelineEventBlock* TimelineEventEndlessRecorder::GetNewBlockLocked(
block->set_next(head_);
block->Open(isolate);
head_ = block;
+ if (FLAG_trace_timeline) {
+ if (isolate != NULL) {
+ OS::Print("Created new isolate block %p for %s\n",
+ block, isolate->name());
+ } else {
+ OS::Print("Created new global block %p\n", block);
+ }
+ }
return head_;
}
@@ -725,6 +743,10 @@ TimelineEventBlock::~TimelineEventBlock() {
TimelineEvent* TimelineEventBlock::StartEvent() {
ASSERT(!IsFull());
+ if (FLAG_trace_timeline) {
+ OS::Print("StartEvent in block %p for thread %" Px "\n",
+ this, OSThread::CurrentCurrentThreadIdAsIntPtr());
+ }
return &events_[length_++];
}
@@ -785,6 +807,9 @@ void TimelineEventBlock::Open(Isolate* isolate) {
void TimelineEventBlock::Finish() {
+ if (FLAG_trace_timeline) {
+ OS::Print("Finish block %p\n", this);
+ }
open_ = false;
}
« no previous file with comments | « runtime/vm/timeline.h ('k') | runtime/vm/timeline_analysis.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698