OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include <cstdlib> | 5 #include <cstdlib> |
6 | 6 |
7 #include "vm/atomic.h" | 7 #include "vm/atomic.h" |
8 #include "vm/isolate.h" | 8 #include "vm/isolate.h" |
9 #include "vm/json_stream.h" | 9 #include "vm/json_stream.h" |
10 #include "vm/lockers.h" | 10 #include "vm/lockers.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 const bool use_ring_recorder = true; | 32 const bool use_ring_recorder = true; |
33 // Some flags require that we use the endless recorder. | 33 // Some flags require that we use the endless recorder. |
34 const bool use_endless_recorder = | 34 const bool use_endless_recorder = |
35 (FLAG_timeline_dir != NULL) || FLAG_timing; | 35 (FLAG_timeline_dir != NULL) || FLAG_timing; |
36 if (use_endless_recorder) { | 36 if (use_endless_recorder) { |
37 recorder_ = new TimelineEventEndlessRecorder(); | 37 recorder_ = new TimelineEventEndlessRecorder(); |
38 } else if (use_ring_recorder) { | 38 } else if (use_ring_recorder) { |
39 recorder_ = new TimelineEventRingRecorder(); | 39 recorder_ = new TimelineEventRingRecorder(); |
40 } | 40 } |
41 vm_stream_ = new TimelineStream(); | 41 vm_stream_ = new TimelineStream(); |
42 vm_stream_->Init("VM", EnableStreamByDefault("VM")); | 42 vm_stream_->Init("VM", EnableStreamByDefault("VM"), NULL); |
| 43 // Global overrides. |
| 44 #define ISOLATE_TIMELINE_STREAM_FLAG_DEFAULT(name, not_used) \ |
| 45 stream_##name##_enabled_ = false; |
| 46 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_FLAG_DEFAULT) |
| 47 #undef ISOLATE_TIMELINE_STREAM_FLAG_DEFAULT |
43 } | 48 } |
44 | 49 |
45 | 50 |
46 void Timeline::Shutdown() { | 51 void Timeline::Shutdown() { |
47 ASSERT(recorder_ != NULL); | 52 ASSERT(recorder_ != NULL); |
48 if (FLAG_timeline_dir != NULL) { | 53 if (FLAG_timeline_dir != NULL) { |
49 recorder_->WriteTo(FLAG_timeline_dir); | 54 recorder_->WriteTo(FLAG_timeline_dir); |
50 } | 55 } |
51 delete recorder_; | 56 delete recorder_; |
52 recorder_ = NULL; | 57 recorder_ = NULL; |
(...skipping 15 matching lines...) Expand all Loading... |
68 | 73 |
69 TimelineStream* Timeline::GetVMStream() { | 74 TimelineStream* Timeline::GetVMStream() { |
70 ASSERT(vm_stream_ != NULL); | 75 ASSERT(vm_stream_ != NULL); |
71 return vm_stream_; | 76 return vm_stream_; |
72 } | 77 } |
73 | 78 |
74 | 79 |
75 TimelineEventRecorder* Timeline::recorder_ = NULL; | 80 TimelineEventRecorder* Timeline::recorder_ = NULL; |
76 TimelineStream* Timeline::vm_stream_ = NULL; | 81 TimelineStream* Timeline::vm_stream_ = NULL; |
77 | 82 |
| 83 #define ISOLATE_TIMELINE_STREAM_DEFINE_FLAG(name, enabled_by_default) \ |
| 84 bool Timeline::stream_##name##_enabled_ = false; |
| 85 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_DEFINE_FLAG) |
| 86 #undef ISOLATE_TIMELINE_STREAM_DEFINE_FLAG |
| 87 |
78 TimelineEvent::TimelineEvent() | 88 TimelineEvent::TimelineEvent() |
79 : timestamp0_(0), | 89 : timestamp0_(0), |
80 timestamp1_(0), | 90 timestamp1_(0), |
81 arguments_(NULL), | 91 arguments_(NULL), |
82 arguments_length_(0), | 92 arguments_length_(0), |
83 state_(0), | 93 state_(0), |
84 label_(NULL), | 94 label_(NULL), |
85 category_(""), | 95 category_(""), |
86 thread_(OSThread::kInvalidThreadId) { | 96 thread_(OSThread::kInvalidThreadId) { |
87 } | 97 } |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 if (timestamp1_ == 0) { | 314 if (timestamp1_ == 0) { |
305 // This duration is still open, use current time as end. | 315 // This duration is still open, use current time as end. |
306 return OS::GetCurrentTimeMicros() - timestamp0_; | 316 return OS::GetCurrentTimeMicros() - timestamp0_; |
307 } | 317 } |
308 return timestamp1_ - timestamp0_; | 318 return timestamp1_ - timestamp0_; |
309 } | 319 } |
310 | 320 |
311 | 321 |
312 TimelineStream::TimelineStream() | 322 TimelineStream::TimelineStream() |
313 : name_(NULL), | 323 : name_(NULL), |
314 enabled_(false) { | 324 enabled_(false), |
| 325 globally_enabled_(NULL) { |
315 } | 326 } |
316 | 327 |
317 | 328 |
318 void TimelineStream::Init(const char* name, bool enabled) { | 329 void TimelineStream::Init(const char* name, |
| 330 bool enabled, |
| 331 const bool* globally_enabled) { |
319 name_ = name; | 332 name_ = name; |
320 enabled_ = enabled; | 333 enabled_ = enabled; |
| 334 globally_enabled_ = globally_enabled; |
321 } | 335 } |
322 | 336 |
323 | 337 |
324 TimelineEvent* TimelineStream::StartEvent() { | 338 TimelineEvent* TimelineStream::StartEvent() { |
325 TimelineEventRecorder* recorder = Timeline::recorder(); | 339 TimelineEventRecorder* recorder = Timeline::recorder(); |
326 if (!enabled_ || (recorder == NULL)) { | 340 if (!Enabled() || (recorder == NULL)) { |
327 return NULL; | 341 return NULL; |
328 } | 342 } |
329 ASSERT(name_ != NULL); | 343 ASSERT(name_ != NULL); |
330 TimelineEvent* event = recorder->StartEvent(); | 344 TimelineEvent* event = recorder->StartEvent(); |
331 if (event != NULL) { | 345 if (event != NULL) { |
332 event->StreamInit(this); | 346 event->StreamInit(this); |
333 } | 347 } |
334 return event; | 348 return event; |
335 } | 349 } |
336 | 350 |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 | 863 |
850 | 864 |
851 TimelineEventBlock* TimelineEventBlockIterator::Next() { | 865 TimelineEventBlock* TimelineEventBlockIterator::Next() { |
852 ASSERT(current_ != NULL); | 866 ASSERT(current_ != NULL); |
853 TimelineEventBlock* r = current_; | 867 TimelineEventBlock* r = current_; |
854 current_ = current_->next(); | 868 current_ = current_->next(); |
855 return r; | 869 return r; |
856 } | 870 } |
857 | 871 |
858 } // namespace dart | 872 } // namespace dart |
OLD | NEW |