| 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 #ifndef VM_TIMELINE_H_ | 5 #ifndef VM_TIMELINE_H_ |
| 6 #define VM_TIMELINE_H_ | 6 #define VM_TIMELINE_H_ |
| 7 | 7 |
| 8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
| 9 #include "vm/bitfield.h" | 9 #include "vm/bitfield.h" |
| 10 | 10 |
| 11 namespace dart { | 11 namespace dart { |
| 12 | 12 |
| 13 class JSONArray; | 13 class JSONArray; |
| 14 class JSONObject; | 14 class JSONObject; |
| 15 class JSONStream; | 15 class JSONStream; |
| 16 class Object; | 16 class Object; |
| 17 class ObjectPointerVisitor; | 17 class ObjectPointerVisitor; |
| 18 class RawArray; | 18 class RawArray; |
| 19 class Thread; | 19 class Thread; |
| 20 class TimelineEvent; | 20 class TimelineEvent; |
| 21 class TimelineEventBlock; | 21 class TimelineEventBlock; |
| 22 class TimelineEventRecorder; | 22 class TimelineEventRecorder; |
| 23 class TimelineStream; | 23 class TimelineStream; |
| 24 | 24 |
| 25 // (name, enabled by default for isolate). |
| 26 #define ISOLATE_TIMELINE_STREAM_LIST(V) \ |
| 27 V(API, false) \ |
| 28 V(Compiler, false) \ |
| 29 V(Embedder, false) \ |
| 30 V(GC, false) \ |
| 31 V(Isolate, false) \ |
| 25 | 32 |
| 26 class Timeline : public AllStatic { | 33 class Timeline : public AllStatic { |
| 27 public: | 34 public: |
| 28 // Initialize timeline system. Not thread safe. | 35 // Initialize timeline system. Not thread safe. |
| 29 static void InitOnce(); | 36 static void InitOnce(); |
| 30 | 37 |
| 31 // Shutdown timeline system. Not thread safe. | 38 // Shutdown timeline system. Not thread safe. |
| 32 static void Shutdown(); | 39 static void Shutdown(); |
| 33 | 40 |
| 34 // Access the global recorder. Not thread safe. | 41 // Access the global recorder. Not thread safe. |
| 35 static TimelineEventRecorder* recorder(); | 42 static TimelineEventRecorder* recorder(); |
| 36 | 43 |
| 37 static bool EnableStreamByDefault(const char* stream_name); | 44 static bool EnableStreamByDefault(const char* stream_name); |
| 38 | 45 |
| 39 static TimelineStream* GetVMStream(); | 46 static TimelineStream* GetVMStream(); |
| 40 | 47 |
| 48 #define ISOLATE_TIMELINE_STREAM_FLAGS(name, not_used) \ |
| 49 static const bool* Stream##name##EnabledFlag() { \ |
| 50 return &stream_##name##_enabled_; \ |
| 51 } \ |
| 52 static void SetStream##name##Enabled(bool enabled) { \ |
| 53 stream_##name##_enabled_ = enabled; \ |
| 54 } |
| 55 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_FLAGS) |
| 56 #undef ISOLATE_TIMELINE_STREAM_FLAGS |
| 57 |
| 41 private: | 58 private: |
| 42 static TimelineEventRecorder* recorder_; | 59 static TimelineEventRecorder* recorder_; |
| 43 static TimelineStream* vm_stream_; | 60 static TimelineStream* vm_stream_; |
| 44 | 61 |
| 62 #define ISOLATE_TIMELINE_STREAM_DECLARE_FLAG(name, not_used) \ |
| 63 static bool stream_##name##_enabled_; |
| 64 ISOLATE_TIMELINE_STREAM_LIST(ISOLATE_TIMELINE_STREAM_DECLARE_FLAG) |
| 65 #undef ISOLATE_TIMELINE_STREAM_DECLARE_FLAG |
| 66 |
| 45 friend class TimelineRecorderOverride; | 67 friend class TimelineRecorderOverride; |
| 46 }; | 68 }; |
| 47 | 69 |
| 48 | 70 |
| 49 // You should get a |TimelineEvent| from a |TimelineStream|. | 71 // You should get a |TimelineEvent| from a |TimelineStream|. |
| 50 class TimelineEvent { | 72 class TimelineEvent { |
| 51 public: | 73 public: |
| 52 // Keep in sync with StateBits below. | 74 // Keep in sync with StateBits below. |
| 53 enum EventType { | 75 enum EventType { |
| 54 kNone, | 76 kNone, |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 | 205 |
| 184 class EventTypeField : public BitField<EventType, kEventTypeBit, 4> {}; | 206 class EventTypeField : public BitField<EventType, kEventTypeBit, 4> {}; |
| 185 | 207 |
| 186 friend class TimelineTestHelper; | 208 friend class TimelineTestHelper; |
| 187 friend class TimelineStream; | 209 friend class TimelineStream; |
| 188 DISALLOW_COPY_AND_ASSIGN(TimelineEvent); | 210 DISALLOW_COPY_AND_ASSIGN(TimelineEvent); |
| 189 }; | 211 }; |
| 190 | 212 |
| 191 | 213 |
| 192 // A stream of timeline events. A stream has a name and can be enabled or | 214 // A stream of timeline events. A stream has a name and can be enabled or |
| 193 // disabled. | 215 // disabled (globally and per isolate). |
| 194 class TimelineStream { | 216 class TimelineStream { |
| 195 public: | 217 public: |
| 196 TimelineStream(); | 218 TimelineStream(); |
| 197 | 219 |
| 198 void Init(const char* name, bool enabled); | 220 void Init(const char* name, |
| 221 bool enabled, |
| 222 const bool* globally_enabled = NULL); |
| 199 | 223 |
| 200 const char* name() const { | 224 const char* name() const { |
| 201 return name_; | 225 return name_; |
| 202 } | 226 } |
| 203 | 227 |
| 228 bool Enabled() const { |
| 229 return ((globally_enabled_ != NULL) && *globally_enabled_) || |
| 230 enabled(); |
| 231 } |
| 232 |
| 204 bool enabled() const { | 233 bool enabled() const { |
| 205 return enabled_; | 234 return enabled_; |
| 206 } | 235 } |
| 207 | 236 |
| 208 void set_enabled(bool enabled) { | 237 void set_enabled(bool enabled) { |
| 209 enabled_ = enabled; | 238 enabled_ = enabled; |
| 210 } | 239 } |
| 211 | 240 |
| 212 // Records an event. Will return |NULL| if not enabled. The returned | 241 // Records an event. Will return |NULL| if not enabled. The returned |
| 213 // |TimelineEvent| is in an undefined state and must be initialized. | 242 // |TimelineEvent| is in an undefined state and must be initialized. |
| 214 TimelineEvent* StartEvent(); | 243 TimelineEvent* StartEvent(); |
| 215 | 244 |
| 216 private: | 245 private: |
| 217 const char* name_; | 246 const char* name_; |
| 218 bool enabled_; | 247 bool enabled_; |
| 248 const bool* globally_enabled_; |
| 219 }; | 249 }; |
| 220 | 250 |
| 221 | |
| 222 // (name, enabled by default). | |
| 223 #define ISOLATE_TIMELINE_STREAM_LIST(V) \ | |
| 224 V(API, false) \ | |
| 225 V(Compiler, false) \ | |
| 226 V(Embedder, false) \ | |
| 227 V(GC, false) \ | |
| 228 V(Isolate, false) \ | |
| 229 | |
| 230 | |
| 231 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, suffix, function) \ | 251 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, suffix, function) \ |
| 232 TimelineDurationScope tds(thread, \ | 252 TimelineDurationScope tds(thread, \ |
| 233 thread->isolate()->GetCompilerStream(), \ | 253 thread->isolate()->GetCompilerStream(), \ |
| 234 "Compile" suffix); \ | 254 "Compile" suffix); \ |
| 235 if (tds.enabled()) { \ | 255 if (tds.enabled()) { \ |
| 236 tds.SetNumArguments(1); \ | 256 tds.SetNumArguments(1); \ |
| 237 tds.CopyArgument( \ | 257 tds.CopyArgument( \ |
| 238 0, \ | 258 0, \ |
| 239 "function", \ | 259 "function", \ |
| 240 const_cast<char*>(function.ToLibNamePrefixedQualifiedCString())); \ | 260 const_cast<char*>(function.ToLibNamePrefixedQualifiedCString())); \ |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 TimelineEventBlock* Next(); | 612 TimelineEventBlock* Next(); |
| 593 | 613 |
| 594 private: | 614 private: |
| 595 TimelineEventBlock* current_; | 615 TimelineEventBlock* current_; |
| 596 TimelineEventRecorder* recorder_; | 616 TimelineEventRecorder* recorder_; |
| 597 }; | 617 }; |
| 598 | 618 |
| 599 } // namespace dart | 619 } // namespace dart |
| 600 | 620 |
| 601 #endif // VM_TIMELINE_H_ | 621 #endif // VM_TIMELINE_H_ |
| OLD | NEW |