| 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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   166 } |   166 } | 
|   167  |   167  | 
|   168  |   168  | 
|   169 void Timeline::InitOnce() { |   169 void Timeline::InitOnce() { | 
|   170   ASSERT(recorder_ == NULL); |   170   ASSERT(recorder_ == NULL); | 
|   171   recorder_ = CreateTimelineRecorder(); |   171   recorder_ = CreateTimelineRecorder(); | 
|   172   ASSERT(recorder_ != NULL); |   172   ASSERT(recorder_ != NULL); | 
|   173   enabled_streams_ = GetEnabledByDefaultTimelineStreams(); |   173   enabled_streams_ = GetEnabledByDefaultTimelineStreams(); | 
|   174   // Global overrides. |   174   // Global overrides. | 
|   175 #define TIMELINE_STREAM_FLAG_DEFAULT(name, not_used)                           \ |   175 #define TIMELINE_STREAM_FLAG_DEFAULT(name, not_used)                           \ | 
|   176   stream_##name##_enabled_ = HasStream(enabled_streams_, #name);               \ |  | 
|   177   stream_##name##_.Init(#name,                                                 \ |   176   stream_##name##_.Init(#name,                                                 \ | 
|   178                         stream_##name##_enabled_,                              \ |   177                         HasStream(enabled_streams_, #name)); | 
|   179                         &stream_##name##_enabled_); |  | 
|   180   TIMELINE_STREAM_LIST(TIMELINE_STREAM_FLAG_DEFAULT) |   178   TIMELINE_STREAM_LIST(TIMELINE_STREAM_FLAG_DEFAULT) | 
|   181 #undef TIMELINE_STREAM_FLAG_DEFAULT |   179 #undef TIMELINE_STREAM_FLAG_DEFAULT | 
|   182  |   180  | 
|   183   if (stream_Embedder_enabled_ && |   181   if (Timeline::stream_Embedder_.enabled() && | 
|   184       (Timeline::get_start_recording_cb() != NULL)) { |   182       (Timeline::get_start_recording_cb() != NULL)) { | 
|   185     Timeline::get_start_recording_cb()(); |   183     Timeline::get_start_recording_cb()(); | 
|   186   } |   184   } | 
|   187 } |   185 } | 
|   188  |   186  | 
|   189  |   187  | 
|   190 void Timeline::StreamStateChange(const char* stream_name, |   188 void Timeline::StreamStateChange(const char* stream_name, | 
|   191                                  bool prev, |   189                                  bool prev, | 
|   192                                  bool curr) { |   190                                  bool curr) { | 
|   193   if (prev == curr) { |   191   if (prev == curr) { | 
|   194     return; |   192     return; | 
|   195   } |   193   } | 
|   196   if (strcmp(stream_name, "Embedder") == 0) { |   194   if (strcmp(stream_name, "Embedder") == 0) { | 
|   197     if (curr && (Timeline::get_start_recording_cb() != NULL)) { |   195     if (curr && (Timeline::get_start_recording_cb() != NULL)) { | 
|   198       Timeline::get_start_recording_cb()(); |   196       Timeline::get_start_recording_cb()(); | 
|   199     } else if (!curr && (Timeline::get_stop_recording_cb() != NULL)) { |   197     } else if (!curr && (Timeline::get_stop_recording_cb() != NULL)) { | 
|   200       Timeline::get_stop_recording_cb()(); |   198       Timeline::get_stop_recording_cb()(); | 
|   201     } |   199     } | 
|   202   } |   200   } | 
|   203 } |   201 } | 
|   204  |   202  | 
|   205  |   203  | 
|   206 void Timeline::Shutdown() { |   204 void Timeline::Shutdown() { | 
|   207   ASSERT(recorder_ != NULL); |   205   ASSERT(recorder_ != NULL); | 
|   208  |   206  | 
|   209   if (stream_Embedder_enabled_ && |   207   if (Timeline::stream_Embedder_.enabled() && | 
|   210       (Timeline::get_stop_recording_cb() != NULL)) { |   208       (Timeline::get_stop_recording_cb() != NULL)) { | 
|   211     Timeline::get_stop_recording_cb()(); |   209     Timeline::get_stop_recording_cb()(); | 
|   212   } |   210   } | 
|   213  |   211  | 
|   214   if (FLAG_timeline_dir != NULL) { |   212   if (FLAG_timeline_dir != NULL) { | 
|   215     recorder_->WriteTo(FLAG_timeline_dir); |   213     recorder_->WriteTo(FLAG_timeline_dir); | 
|   216   } |   214   } | 
|   217  |   215  | 
|   218   // Disable global streams. |   216   // Disable global streams. | 
|   219 #define TIMELINE_STREAM_DISABLE(name, not_used)                                \ |   217 #define TIMELINE_STREAM_DISABLE(name, not_used)                                \ | 
|   220   stream_##name##_enabled_ = false; |   218   Timeline::stream_##name##_.set_enabled(false); | 
|   221   TIMELINE_STREAM_LIST(TIMELINE_STREAM_DISABLE) |   219   TIMELINE_STREAM_LIST(TIMELINE_STREAM_DISABLE) | 
|   222 #undef TIMELINE_STREAM_DISABLE |   220 #undef TIMELINE_STREAM_DISABLE | 
|   223   delete recorder_; |   221   delete recorder_; | 
|   224   recorder_ = NULL; |   222   recorder_ = NULL; | 
|   225   if (enabled_streams_ != NULL) { |   223   if (enabled_streams_ != NULL) { | 
|   226     FreeEnabledByDefaultTimelineStreams(enabled_streams_); |   224     FreeEnabledByDefaultTimelineStreams(enabled_streams_); | 
|   227     enabled_streams_ = NULL; |   225     enabled_streams_ = NULL; | 
|   228   } |   226   } | 
|   229 } |   227 } | 
|   230  |   228  | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   268   { |   266   { | 
|   269     JSONArray availableStreams(&obj, "availableStreams"); |   267     JSONArray availableStreams(&obj, "availableStreams"); | 
|   270 #define ADD_STREAM_NAME(name, not_used)                                        \ |   268 #define ADD_STREAM_NAME(name, not_used)                                        \ | 
|   271     availableStreams.AddValue(#name); |   269     availableStreams.AddValue(#name); | 
|   272 TIMELINE_STREAM_LIST(ADD_STREAM_NAME); |   270 TIMELINE_STREAM_LIST(ADD_STREAM_NAME); | 
|   273 #undef ADD_STREAM_NAME |   271 #undef ADD_STREAM_NAME | 
|   274   } |   272   } | 
|   275   { |   273   { | 
|   276     JSONArray recordedStreams(&obj, "recordedStreams"); |   274     JSONArray recordedStreams(&obj, "recordedStreams"); | 
|   277 #define ADD_RECORDED_STREAM_NAME(name, not_used)                               \ |   275 #define ADD_RECORDED_STREAM_NAME(name, not_used)                               \ | 
|   278     if (stream_##name##_enabled_) {                                            \ |   276     if (stream_##name##_.enabled()) {                                          \ | 
|   279       recordedStreams.AddValue(#name);                                         \ |   277       recordedStreams.AddValue(#name);                                         \ | 
|   280     } |   278     } | 
|   281 TIMELINE_STREAM_LIST(ADD_RECORDED_STREAM_NAME); |   279 TIMELINE_STREAM_LIST(ADD_RECORDED_STREAM_NAME); | 
|   282 #undef ADD_RECORDED_STREAM_NAME |   280 #undef ADD_RECORDED_STREAM_NAME | 
|   283   } |   281   } | 
|   284 } |   282 } | 
|   285  |   283  | 
|   286  |   284  | 
|   287 void Timeline::Clear() { |   285 void Timeline::Clear() { | 
|   288   TimelineEventRecorder* recorder = Timeline::recorder(); |   286   TimelineEventRecorder* recorder = Timeline::recorder(); | 
|   289   if (recorder == NULL) { |   287   if (recorder == NULL) { | 
|   290     return; |   288     return; | 
|   291   } |   289   } | 
|   292   ReclaimCachedBlocksFromThreads(); |   290   ReclaimCachedBlocksFromThreads(); | 
|   293   recorder->Clear(); |   291   recorder->Clear(); | 
|   294 } |   292 } | 
|   295  |   293  | 
|   296  |   294  | 
|   297 TimelineEventRecorder* Timeline::recorder_ = NULL; |   295 TimelineEventRecorder* Timeline::recorder_ = NULL; | 
|   298 MallocGrowableArray<char*>* Timeline::enabled_streams_ = NULL; |   296 MallocGrowableArray<char*>* Timeline::enabled_streams_ = NULL; | 
|   299 Dart_EmbedderTimelineStartRecording Timeline::start_recording_cb_ = NULL; |   297 Dart_EmbedderTimelineStartRecording Timeline::start_recording_cb_ = NULL; | 
|   300 Dart_EmbedderTimelineStopRecording Timeline::stop_recording_cb_ = NULL; |   298 Dart_EmbedderTimelineStopRecording Timeline::stop_recording_cb_ = NULL; | 
|   301  |   299  | 
|   302 #define TIMELINE_STREAM_DEFINE(name, enabled_by_default)                       \ |   300 #define TIMELINE_STREAM_DEFINE(name, enabled_by_default)                       \ | 
|   303   bool Timeline::stream_##name##_enabled_ = enabled_by_default;                \ |  | 
|   304   TimelineStream Timeline::stream_##name##_; |   301   TimelineStream Timeline::stream_##name##_; | 
|   305   TIMELINE_STREAM_LIST(TIMELINE_STREAM_DEFINE) |   302   TIMELINE_STREAM_LIST(TIMELINE_STREAM_DEFINE) | 
|   306 #undef TIMELINE_STREAM_DEFINE |   303 #undef TIMELINE_STREAM_DEFINE | 
|   307  |   304  | 
|   308 TimelineEvent::TimelineEvent() |   305 TimelineEvent::TimelineEvent() | 
|   309     : timestamp0_(0), |   306     : timestamp0_(0), | 
|   310       timestamp1_(0), |   307       timestamp1_(0), | 
|   311       thread_timestamp0_(-1), |   308       thread_timestamp0_(-1), | 
|   312       thread_timestamp1_(-1), |   309       thread_timestamp1_(-1), | 
|   313       arguments_(NULL), |   310       arguments_(NULL), | 
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   720   if (thread_timestamp1_ == -1) { |   717   if (thread_timestamp1_ == -1) { | 
|   721     // This duration is still open, use current time as end. |   718     // This duration is still open, use current time as end. | 
|   722     return OS::GetCurrentThreadCPUMicros() - thread_timestamp0_; |   719     return OS::GetCurrentThreadCPUMicros() - thread_timestamp0_; | 
|   723   } |   720   } | 
|   724   return thread_timestamp1_ - thread_timestamp0_; |   721   return thread_timestamp1_ - thread_timestamp0_; | 
|   725 } |   722 } | 
|   726  |   723  | 
|   727  |   724  | 
|   728 TimelineStream::TimelineStream() |   725 TimelineStream::TimelineStream() | 
|   729     : name_(NULL), |   726     : name_(NULL), | 
|   730       enabled_(false), |   727       enabled_(false) { | 
|   731       globally_enabled_(NULL) { |  | 
|   732 } |   728 } | 
|   733  |   729  | 
|   734  |   730  | 
|   735 void TimelineStream::Init(const char* name, |   731 void TimelineStream::Init(const char* name, | 
|   736                           bool enabled, |   732                           bool enabled) { | 
|   737                           const bool* globally_enabled) { |  | 
|   738   name_ = name; |   733   name_ = name; | 
|   739   enabled_ = enabled; |   734   enabled_ = enabled; | 
|   740   globally_enabled_ = globally_enabled; |  | 
|   741 } |   735 } | 
|   742  |   736  | 
|   743  |   737  | 
|   744 TimelineEvent* TimelineStream::StartEvent() { |   738 TimelineEvent* TimelineStream::StartEvent() { | 
|   745   TimelineEventRecorder* recorder = Timeline::recorder(); |   739   TimelineEventRecorder* recorder = Timeline::recorder(); | 
|   746   if (!Enabled() || (recorder == NULL)) { |   740   if (!enabled() || (recorder == NULL)) { | 
|   747     return NULL; |   741     return NULL; | 
|   748   } |   742   } | 
|   749   ASSERT(name_ != NULL); |   743   ASSERT(name_ != NULL); | 
|   750   TimelineEvent* event = recorder->StartEvent(); |   744   TimelineEvent* event = recorder->StartEvent(); | 
|   751   if (event != NULL) { |   745   if (event != NULL) { | 
|   752     event->StreamInit(this); |   746     event->StreamInit(this); | 
|   753   } |   747   } | 
|   754   return event; |   748   return event; | 
|   755 } |   749 } | 
|   756  |   750  | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|   782  |   776  | 
|   783 TimelineEventScope::~TimelineEventScope() { |   777 TimelineEventScope::~TimelineEventScope() { | 
|   784   FreeArguments(); |   778   FreeArguments(); | 
|   785 } |   779 } | 
|   786  |   780  | 
|   787  |   781  | 
|   788 void TimelineEventScope::Init() { |   782 void TimelineEventScope::Init() { | 
|   789   ASSERT(enabled_ == false); |   783   ASSERT(enabled_ == false); | 
|   790   ASSERT(label_ != NULL); |   784   ASSERT(label_ != NULL); | 
|   791   ASSERT(stream_ != NULL); |   785   ASSERT(stream_ != NULL); | 
|   792   if (!stream_->Enabled()) { |   786   if (!stream_->enabled()) { | 
|   793     // Stream is not enabled, do nothing. |   787     // Stream is not enabled, do nothing. | 
|   794     return; |   788     return; | 
|   795   } |   789   } | 
|   796   enabled_ = true; |   790   enabled_ = true; | 
|   797 } |   791 } | 
|   798  |   792  | 
|   799  |   793  | 
|   800 void TimelineEventScope::SetNumArguments(intptr_t length) { |   794 void TimelineEventScope::SetNumArguments(intptr_t length) { | 
|   801   if (!enabled()) { |   795   if (!enabled()) { | 
|   802     return; |   796     return; | 
| (...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1694 TimelineEventBlock* TimelineEventBlockIterator::Next() { |  1688 TimelineEventBlock* TimelineEventBlockIterator::Next() { | 
|  1695   ASSERT(current_ != NULL); |  1689   ASSERT(current_ != NULL); | 
|  1696   TimelineEventBlock* r = current_; |  1690   TimelineEventBlock* r = current_; | 
|  1697   current_ = current_->next(); |  1691   current_ = current_->next(); | 
|  1698   return r; |  1692   return r; | 
|  1699 } |  1693 } | 
|  1700  |  1694  | 
|  1701 #endif  // !PRODUCT |  1695 #endif  // !PRODUCT | 
|  1702  |  1696  | 
|  1703 }  // namespace dart |  1697 }  // namespace dart | 
| OLD | NEW |