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

Side by Side Diff: runtime/vm/dart_api_impl.cc

Issue 1294023009: Switch to a VM wide timeline recorder (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 "include/dart_api.h" 5 #include "include/dart_api.h"
6 #include "include/dart_mirrors_api.h" 6 #include "include/dart_mirrors_api.h"
7 #include "include/dart_native_api.h" 7 #include "include/dart_native_api.h"
8 8
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "vm/class_finalizer.h" 10 #include "vm/class_finalizer.h"
(...skipping 5836 matching lines...) Expand 10 before | Expand all | Expand 10 after
5847 } 5847 }
5848 5848
5849 5849
5850 DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer, 5850 DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer,
5851 void* user_data) { 5851 void* user_data) {
5852 Isolate* isolate = Isolate::Current(); 5852 Isolate* isolate = Isolate::Current();
5853 CHECK_ISOLATE(isolate); 5853 CHECK_ISOLATE(isolate);
5854 if (consumer == NULL) { 5854 if (consumer == NULL) {
5855 return false; 5855 return false;
5856 } 5856 }
5857 TimelineEventRecorder* timeline_recorder = isolate->timeline_event_recorder(); 5857 TimelineEventRecorder* timeline_recorder = Timeline::recorder();
5858 if (timeline_recorder == NULL) { 5858 if (timeline_recorder == NULL) {
5859 // Nothing has been recorded. 5859 // Nothing has been recorded.
5860 return false; 5860 return false;
5861 } 5861 }
5862 // Suspend execution of other threads while serializing to JSON. 5862 // Suspend execution of other threads while serializing to JSON.
5863 isolate->thread_registry()->SafepointThreads(); 5863 isolate->thread_registry()->SafepointThreads();
5864 JSONStream js; 5864 JSONStream js;
5865 timeline_recorder->PrintJSON(&js); 5865 IsolateTimelineEventFilter filter(isolate);
5866 timeline_recorder->PrintJSON(&js, &filter);
5866 // Resume execution of other threads. 5867 // Resume execution of other threads.
5867 isolate->thread_registry()->ResumeAllThreads(); 5868 isolate->thread_registry()->ResumeAllThreads();
5868 5869
5869 // Copy output. 5870 // Copy output.
5870 char* output = NULL; 5871 char* output = NULL;
5871 intptr_t output_length = 0; 5872 intptr_t output_length = 0;
5872 js.Steal(const_cast<const char**>(&output), &output_length); 5873 js.Steal(const_cast<const char**>(&output), &output_length);
5873 if (output != NULL) { 5874 if (output != NULL) {
5874 // Add one for the '\0' character. 5875 // Add one for the '\0' character.
5875 output_length++; 5876 output_length++;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
5968 RETURN_NULL_ERROR(label); 5969 RETURN_NULL_ERROR(label);
5969 } 5970 }
5970 if (async_id == NULL) { 5971 if (async_id == NULL) {
5971 RETURN_NULL_ERROR(async_id); 5972 RETURN_NULL_ERROR(async_id);
5972 } 5973 }
5973 *async_id = -1; 5974 *async_id = -1;
5974 TimelineStream* stream = isolate->GetEmbedderStream(); 5975 TimelineStream* stream = isolate->GetEmbedderStream();
5975 ASSERT(stream != NULL); 5976 ASSERT(stream != NULL);
5976 TimelineEvent* event = stream->StartEvent(); 5977 TimelineEvent* event = stream->StartEvent();
5977 if (event != NULL) { 5978 if (event != NULL) {
5978 *async_id = event->AsyncBegin(label); 5979 TimelineEventRecorder* recorder = Timeline::recorder();
5980 ASSERT(recorder != NULL);
5981 *async_id = recorder->GetNextAsyncId();
5982 event->AsyncBegin(label, *async_id);
5979 event->Complete(); 5983 event->Complete();
5980 } 5984 }
5981 return Api::Success(); 5985 return Api::Success();
5982 } 5986 }
5983 5987
5984 5988
5985 DART_EXPORT Dart_Handle Dart_TimelineAsyncInstant(const char* label, 5989 DART_EXPORT Dart_Handle Dart_TimelineAsyncInstant(const char* label,
5986 int64_t async_id) { 5990 int64_t async_id) {
5987 if (async_id < 0) { 5991 if (async_id < 0) {
5988 return Api::Success(); 5992 return Api::Success();
(...skipping 28 matching lines...) Expand all
6017 ASSERT(stream != NULL); 6021 ASSERT(stream != NULL);
6018 TimelineEvent* event = stream->StartEvent(); 6022 TimelineEvent* event = stream->StartEvent();
6019 if (event != NULL) { 6023 if (event != NULL) {
6020 event->AsyncEnd(label, async_id); 6024 event->AsyncEnd(label, async_id);
6021 event->Complete(); 6025 event->Complete();
6022 } 6026 }
6023 return Api::Success(); 6027 return Api::Success();
6024 } 6028 }
6025 6029
6026 } // namespace dart 6030 } // namespace dart
OLDNEW
« runtime/vm/dart.cc ('K') | « runtime/vm/dart.cc ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698