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 |