Chromium Code Reviews| Index: runtime/vm/dart_api_impl.cc |
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc |
| index 12a7fdb29e501f2d732d551fc6b715e79d1be954..6e1d9f5dc8ff48400092056bee3ee5f86c594d0d 100644 |
| --- a/runtime/vm/dart_api_impl.cc |
| +++ b/runtime/vm/dart_api_impl.cc |
| @@ -78,12 +78,12 @@ const char* CanonicalFunction(const char* func) { |
| #ifndef PRODUCT |
| #define API_TIMELINE_DURATION \ |
| TimelineDurationScope tds(Thread::Current(), \ |
| - Timeline::GetVMApiStream(), \ |
| + Timeline::GetAPIStream(), \ |
| CURRENT_FUNC) |
| #define API_TIMELINE_BEGIN_END \ |
| TimelineBeginEndScope tbes(Thread::Current(), \ |
| - Timeline::GetVMApiStream(), \ |
| + Timeline::GetAPIStream(), \ |
| CURRENT_FUNC) |
| #else |
| #define API_TIMELINE_DURATION do { } while (false) |
| @@ -5775,31 +5775,7 @@ DART_EXPORT int64_t Dart_TimelineGetMicros() { |
| } |
| -DART_EXPORT void Dart_TimelineSetRecordedStreams(int64_t stream_mask) { |
| - if (!FLAG_support_timeline) { |
| - return; |
| - } |
| - Isolate* isolate = Isolate::Current(); |
| - CHECK_ISOLATE(isolate); |
| - isolate->GetAPIStream()->set_enabled( |
| - (stream_mask & DART_TIMELINE_STREAM_API) != 0); |
| - isolate->GetCompilerStream()->set_enabled( |
| - (stream_mask & DART_TIMELINE_STREAM_COMPILER) != 0); |
| - isolate->GetDartStream()->set_enabled( |
| - (stream_mask & DART_TIMELINE_STREAM_DART) != 0); |
| - isolate->GetDebuggerStream()->set_enabled( |
| - (stream_mask & DART_TIMELINE_STREAM_DEBUGGER) != 0); |
| - isolate->GetEmbedderStream()->set_enabled( |
| - (stream_mask & DART_TIMELINE_STREAM_EMBEDDER) != 0); |
| - isolate->GetGCStream()->set_enabled( |
| - (stream_mask & DART_TIMELINE_STREAM_GC) != 0); |
| - isolate->GetIsolateStream()->set_enabled( |
| - (stream_mask & DART_TIMELINE_STREAM_ISOLATE) != 0); |
| -} |
| - |
| - |
| DART_EXPORT void Dart_GlobalTimelineSetRecordedStreams(int64_t stream_mask) { |
| - // Per isolate overrides. |
| if (!FLAG_support_timeline) { |
| return; |
| } |
| @@ -5815,6 +5791,8 @@ DART_EXPORT void Dart_GlobalTimelineSetRecordedStreams(int64_t stream_mask) { |
| const bool gc_enabled = (stream_mask & DART_TIMELINE_STREAM_GC) != 0; |
| const bool isolate_enabled = |
| (stream_mask & DART_TIMELINE_STREAM_ISOLATE) != 0; |
| + const bool vm_enabled = |
| + (stream_mask & DART_TIMELINE_STREAM_VM) != 0; |
| Timeline::SetStreamAPIEnabled(api_enabled); |
| Timeline::SetStreamCompilerEnabled(compiler_enabled); |
| Timeline::SetStreamDartEnabled(dart_enabled); |
| @@ -5822,10 +5800,7 @@ DART_EXPORT void Dart_GlobalTimelineSetRecordedStreams(int64_t stream_mask) { |
| Timeline::SetStreamEmbedderEnabled(embedder_enabled); |
| Timeline::SetStreamGCEnabled(gc_enabled); |
| Timeline::SetStreamIsolateEnabled(isolate_enabled); |
| - // VM wide. |
| - const bool vm_enabled = |
| - (stream_mask & DART_TIMELINE_STREAM_VM) != 0; |
| - Timeline::GetVMStream()->set_enabled(vm_enabled); |
| + Timeline::SetStreamVMEnabled(vm_enabled); |
| } |
| @@ -5924,44 +5899,14 @@ static bool StreamTraceEvents(Dart_StreamConsumer consumer, |
| } |
| -DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer, |
| - void* user_data) { |
| - if (!FLAG_support_timeline) { |
| - return false; |
| - } |
| - Isolate* isolate = Isolate::Current(); |
| - CHECK_ISOLATE(isolate); |
| - if (consumer == NULL) { |
| - return false; |
| - } |
| - TimelineEventRecorder* timeline_recorder = Timeline::recorder(); |
| - if (timeline_recorder == NULL) { |
| - // Nothing has been recorded. |
| - return false; |
| - } |
| - Thread* T = Thread::Current(); |
| - StackZone zone(T); |
| - Timeline::ReclaimCachedBlocksFromThreads(); |
| - JSONStream js; |
| - IsolateTimelineEventFilter filter(isolate->main_port()); |
| - timeline_recorder->PrintTraceEvent(&js, &filter); |
| - StartStreamToConsumer(consumer, user_data, "timeline"); |
| - bool success = StreamTraceEvents(consumer, user_data, &js); |
| - FinishStreamToConsumer(consumer, user_data, "timeline"); |
| - return success; |
| -} |
| - |
| - |
| DART_EXPORT void Dart_SetEmbedderTimelineCallbacks( |
| Dart_EmbedderTimelineStartRecording start_recording, |
| - Dart_EmbedderTimelineStopRecording stop_recording, |
| - Dart_EmbedderTimelineGetTimeline get_timeline) { |
| + Dart_EmbedderTimelineStopRecording stop_recording) { |
| if (!FLAG_support_timeline) { |
| return; |
| } |
| Timeline::set_start_recording_cb(start_recording); |
| Timeline::set_stop_recording_cb(stop_recording); |
| - Timeline::set_get_timeline_cb(get_timeline); |
| } |
| @@ -5996,67 +5941,105 @@ DART_EXPORT bool Dart_GlobalTimelineGetTrace(Dart_StreamConsumer consumer, |
| } |
| -DART_EXPORT Dart_Handle Dart_TimelineDuration(const char* label, |
| - int64_t start_micros, |
| - int64_t end_micros) { |
| +DART_EXPORT void Dart_TimelineEvent(const char* label, |
| + int64_t timestamp0, |
| + int64_t timestamp1, |
| + Dart_Timeline_Event_Type type, |
| + intptr_t argument_count, |
| + const char** argument_names, |
| + const char** argument_values) { |
| if (!FLAG_support_timeline) { |
| - return Api::Success(); |
| + return; |
| } |
| - Isolate* isolate = Isolate::Current(); |
| - CHECK_ISOLATE(isolate); |
| - if (label == NULL) { |
| - RETURN_NULL_ERROR(label); |
| + if (type < Dart_Timeline_Event_Begin) { |
| + return; |
| + } |
| + if (type > Dart_Timeline_Event_Duration) { |
| + return; |
| + } |
| + TimelineStream* stream = Timeline::GetEmbedderStream(); |
| + ASSERT(stream != NULL); |
| + TimelineEvent* event = stream->StartEvent(); |
| + if (event == NULL) { |
| + return; |
| + } |
| + switch (type) { |
| + case Dart_Timeline_Event_Begin: |
| + event->Begin(label, timestamp0); |
| + break; |
| + case Dart_Timeline_Event_End: |
| + event->End(label, timestamp0); |
| + break; |
| + case Dart_Timeline_Event_Instant: |
| + event->Instant(label, timestamp0); |
| + break; |
| + case Dart_Timeline_Event_Duration: |
| + event->Duration(label, timestamp0, timestamp1); |
| + break; |
| + default: |
| + FATAL("Unknown Dart_Timeline_Event_Type"); |
| + } |
| + event->SetNumArguments(argument_count); |
| + for (intptr_t i = 0; i < argument_count; i++) { |
| + event->CopyArgument(i, argument_names[i], argument_values[i]); |
| + } |
| + event->Complete(); |
| +} |
| + |
| + |
| +DART_EXPORT void Dart_TimelineDuration(const char* label, |
| + int64_t start_micros, |
| + int64_t end_micros) { |
| + if (!FLAG_support_timeline) { |
| + return; |
| } |
| if (start_micros > end_micros) { |
| - const char* msg = "%s: start_micros must be <= end_micros"; |
| - return Api::NewError(msg, CURRENT_FUNC); |
| + FATAL1("%s: start_micros must be <= end_micros", CURRENT_FUNC); |
|
rmacnak
2016/03/16 17:51:30
Even though these functions can't use handles anym
Cutch
2016/03/16 18:24:08
I had the same thought but decided to do it only w
|
| + } |
| + if (label == NULL) { |
| + return; |
| } |
| - TimelineStream* stream = isolate->GetEmbedderStream(); |
| + TimelineStream* stream = Timeline::GetEmbedderStream(); |
| ASSERT(stream != NULL); |
| TimelineEvent* event = stream->StartEvent(); |
| if (event != NULL) { |
| event->Duration(label, start_micros, end_micros); |
| event->Complete(); |
| } |
| - return Api::Success(); |
| } |
| -DART_EXPORT Dart_Handle Dart_TimelineInstant(const char* label) { |
| +DART_EXPORT void Dart_TimelineInstant(const char* label) { |
| if (!FLAG_support_timeline) { |
| - return Api::Success(); |
| + return; |
| } |
| - Isolate* isolate = Isolate::Current(); |
| - CHECK_ISOLATE(isolate); |
| if (label == NULL) { |
| - RETURN_NULL_ERROR(label); |
| + return; |
| } |
| - TimelineStream* stream = isolate->GetEmbedderStream(); |
| + TimelineStream* stream = Timeline::GetEmbedderStream(); |
| ASSERT(stream != NULL); |
| TimelineEvent* event = stream->StartEvent(); |
| if (event != NULL) { |
| event->Instant(label); |
| event->Complete(); |
| } |
| - return Api::Success(); |
| + return; |
| } |
| -DART_EXPORT Dart_Handle Dart_TimelineAsyncBegin(const char* label, |
| - int64_t* async_id) { |
| +DART_EXPORT void Dart_TimelineAsyncBegin(const char* label, |
| + int64_t* async_id) { |
| if (!FLAG_support_timeline) { |
| - return Api::Success(); |
| + return; |
| } |
| - Isolate* isolate = Isolate::Current(); |
| - CHECK_ISOLATE(isolate); |
| if (label == NULL) { |
| - RETURN_NULL_ERROR(label); |
| + return; |
| } |
| if (async_id == NULL) { |
| - RETURN_NULL_ERROR(async_id); |
| + return; |
| } |
| *async_id = -1; |
| - TimelineStream* stream = isolate->GetEmbedderStream(); |
| + TimelineStream* stream = Timeline::GetEmbedderStream(); |
| ASSERT(stream != NULL); |
| TimelineEvent* event = stream->StartEvent(); |
| if (event != NULL) { |
| @@ -6066,55 +6049,51 @@ DART_EXPORT Dart_Handle Dart_TimelineAsyncBegin(const char* label, |
| event->AsyncBegin(label, *async_id); |
| event->Complete(); |
| } |
| - return Api::Success(); |
| + return; |
| } |
| -DART_EXPORT Dart_Handle Dart_TimelineAsyncInstant(const char* label, |
| - int64_t async_id) { |
| +DART_EXPORT void Dart_TimelineAsyncInstant(const char* label, |
| + int64_t async_id) { |
| if (!FLAG_support_timeline) { |
| - return Api::Success(); |
| + return; |
| } |
| if (async_id < 0) { |
| - return Api::Success(); |
| + return; |
| } |
| - Isolate* isolate = Isolate::Current(); |
| - CHECK_ISOLATE(isolate); |
| if (label == NULL) { |
| - RETURN_NULL_ERROR(label); |
| + return; |
| } |
| - TimelineStream* stream = isolate->GetEmbedderStream(); |
| + TimelineStream* stream = Timeline::GetEmbedderStream(); |
| ASSERT(stream != NULL); |
| TimelineEvent* event = stream->StartEvent(); |
| if (event != NULL) { |
| event->AsyncInstant(label, async_id); |
| event->Complete(); |
| } |
| - return Api::Success(); |
| + return; |
| } |
| -DART_EXPORT Dart_Handle Dart_TimelineAsyncEnd(const char* label, |
| - int64_t async_id) { |
| +DART_EXPORT void Dart_TimelineAsyncEnd(const char* label, |
| + int64_t async_id) { |
| if (!FLAG_support_timeline) { |
| - return Api::Success(); |
| + return; |
| } |
| if (async_id < 0) { |
| - return Api::Success(); |
| + return; |
| } |
| - Isolate* isolate = Isolate::Current(); |
| - CHECK_ISOLATE(isolate); |
| if (label == NULL) { |
| - RETURN_NULL_ERROR(label); |
| + return; |
| } |
| - TimelineStream* stream = isolate->GetEmbedderStream(); |
| + TimelineStream* stream = Timeline::GetEmbedderStream(); |
| ASSERT(stream != NULL); |
| TimelineEvent* event = stream->StartEvent(); |
| if (event != NULL) { |
| event->AsyncEnd(label, async_id); |
| event->Complete(); |
| } |
| - return Api::Success(); |
| + return; |
| } |
| // The precompiler is included in dart_bootstrap and dart_noopt, and |