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

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

Issue 1411783004: More timeline cleanups (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « runtime/vm/bootstrap_natives.h ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5721 matching lines...) Expand 10 before | Expand all | Expand 10 after
5732 Timeline::SetStreamEmbedderEnabled(embedder_enabled); 5732 Timeline::SetStreamEmbedderEnabled(embedder_enabled);
5733 Timeline::SetStreamGCEnabled(gc_enabled); 5733 Timeline::SetStreamGCEnabled(gc_enabled);
5734 Timeline::SetStreamIsolateEnabled(isolate_enabled); 5734 Timeline::SetStreamIsolateEnabled(isolate_enabled);
5735 // VM wide. 5735 // VM wide.
5736 const bool vm_enabled = 5736 const bool vm_enabled =
5737 (stream_mask & DART_TIMELINE_STREAM_VM) != 0; 5737 (stream_mask & DART_TIMELINE_STREAM_VM) != 0;
5738 Timeline::GetVMStream()->set_enabled(vm_enabled); 5738 Timeline::GetVMStream()->set_enabled(vm_enabled);
5739 } 5739 }
5740 5740
5741 5741
5742 // '[' + ']' + '\0'.
5743 #define MINIMUM_OUTPUT_LENGTH 3
5744
5745 // Trims the '[' and ']' characters and, depending on whether or not more events
5746 // will follow, adjusts the last character of the string to either a '\0' or
5747 // ','.
5748 static char* TrimOutput(char* output,
5749 intptr_t* output_length,
5750 bool events_will_follow) {
5751 ASSERT(output != NULL);
5752 ASSERT(output_length != NULL);
5753 ASSERT(*output_length > MINIMUM_OUTPUT_LENGTH);
5754 // We expect the first character to be the opening of an array.
5755 ASSERT(output[0] == '[');
5756 // We expect the last character to be the closing of an array.
5757 ASSERT(output[*output_length - 2] == ']');
5758 if (events_will_follow) {
5759 // Replace array closing character (']') with ','.
5760 output[*output_length - 2] = ',';
5761 } else {
5762 // Replace array closing character (']') with '\0'.
5763 output[*output_length - 2] = '\0';
5764 }
5765 // Skip the array opening character ('[').
5766 *output_length -= 2;
5767 return &output[1];
5768 }
5769
5770
5771 static void StartStreamToConsumer(Dart_StreamConsumer consumer, 5742 static void StartStreamToConsumer(Dart_StreamConsumer consumer,
5772 void* user_data, 5743 void* user_data,
5773 const char* stream_name) { 5744 const char* stream_name) {
5774 // Start stream. 5745 // Start stream.
5775 consumer(Dart_StreamConsumer_kStart, 5746 consumer(Dart_StreamConsumer_kStart,
5776 stream_name, 5747 stream_name,
5777 NULL, 5748 NULL,
5778 0, 5749 0,
5779 user_data); 5750 user_data);
5780 } 5751 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
5822 cursor += remaining; 5793 cursor += remaining;
5823 remaining -= remaining; 5794 remaining -= remaining;
5824 } 5795 }
5825 ASSERT(cursor == output_length); 5796 ASSERT(cursor == output_length);
5826 ASSERT(remaining == 0); 5797 ASSERT(remaining == 0);
5827 } 5798 }
5828 5799
5829 5800
5830 static bool StreamTraceEvents(Dart_StreamConsumer consumer, 5801 static bool StreamTraceEvents(Dart_StreamConsumer consumer,
5831 void* user_data, 5802 void* user_data,
5832 JSONStream* js, 5803 JSONStream* js) {
5833 const char* dart_events) {
5834 ASSERT(js != NULL); 5804 ASSERT(js != NULL);
5835 // Steal output from JSONStream. 5805 // Steal output from JSONStream.
5836 char* output = NULL; 5806 char* output = NULL;
5837 intptr_t output_length = 0; 5807 intptr_t output_length = 0;
5838 js->Steal(const_cast<const char**>(&output), &output_length); 5808 js->Steal(const_cast<const char**>(&output), &output_length);
5839 5809
5840 const bool output_vm = output_length > MINIMUM_OUTPUT_LENGTH;
5841 const bool output_dart = dart_events != NULL;
5842
5843 if (!output_vm && !output_dart) {
5844 // We stole the JSONStream's output buffer, free it.
5845 free(output);
5846 // Nothing will be emitted.
5847 return false;
5848 }
5849
5850 // Start the stream. 5810 // Start the stream.
5851 StartStreamToConsumer(consumer, user_data, "timeline"); 5811 StartStreamToConsumer(consumer, user_data, "timeline");
5852 5812
5853 // Send events from the VM. 5813 DataStreamToConsumer(consumer,
5854 if (output_vm) { 5814 user_data,
5855 // Add one for the '\0' character. 5815 output,
5856 output_length++; 5816 output_length,
5857 char* trimmed_output = TrimOutput(output, &output_length, output_dart); 5817 "timeline");
5858 DataStreamToConsumer(consumer, user_data, 5818
5859 trimmed_output, output_length, "timeline");
5860 }
5861 // We stole the JSONStream's output buffer, free it. 5819 // We stole the JSONStream's output buffer, free it.
5862 free(output); 5820 free(output);
5863 5821
5864 // Send events from dart.
5865 if (output_dart) {
5866 const intptr_t dart_events_len = strlen(dart_events) + 1; // +1 for '\0'.
5867 DataStreamToConsumer(consumer, user_data,
5868 dart_events, dart_events_len, "timeline");
5869 }
5870
5871 // Finish the stream. 5822 // Finish the stream.
5872 FinishStreamToConsumer(consumer, user_data, "timeline"); 5823 FinishStreamToConsumer(consumer, user_data, "timeline");
5873 return true; 5824 return true;
5874 } 5825 }
5875 5826
5876 5827
5877 DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer, 5828 DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer,
5878 void* user_data) { 5829 void* user_data) {
5879 Isolate* isolate = Isolate::Current(); 5830 Isolate* isolate = Isolate::Current();
5880 CHECK_ISOLATE(isolate); 5831 CHECK_ISOLATE(isolate);
5881 if (consumer == NULL) { 5832 if (consumer == NULL) {
5882 return false; 5833 return false;
5883 } 5834 }
5884 TimelineEventRecorder* timeline_recorder = Timeline::recorder(); 5835 TimelineEventRecorder* timeline_recorder = Timeline::recorder();
5885 if (timeline_recorder == NULL) { 5836 if (timeline_recorder == NULL) {
5886 // Nothing has been recorded. 5837 // Nothing has been recorded.
5887 return false; 5838 return false;
5888 } 5839 }
5889 Thread* T = Thread::Current(); 5840 Thread* T = Thread::Current();
5890 StackZone zone(T); 5841 StackZone zone(T);
5891 Timeline::ReclaimCachedBlocksFromThreads(); 5842 Timeline::ReclaimCachedBlocksFromThreads();
5892 JSONStream js; 5843 JSONStream js;
5893 IsolateTimelineEventFilter filter(isolate); 5844 IsolateTimelineEventFilter filter(isolate->main_port());
5894 timeline_recorder->PrintTraceEvent(&js, &filter); 5845 timeline_recorder->PrintTraceEvent(&js, &filter);
5895 const char* dart_events = 5846 return StreamTraceEvents(consumer, user_data, &js);
5896 DartTimelineEventIterator::PrintTraceEvents(timeline_recorder,
5897 zone.GetZone(),
5898 isolate);
5899 return StreamTraceEvents(consumer, user_data, &js, dart_events);
5900 } 5847 }
5901 5848
5902 5849
5903 DART_EXPORT bool Dart_GlobalTimelineGetTrace(Dart_StreamConsumer consumer, 5850 DART_EXPORT bool Dart_GlobalTimelineGetTrace(Dart_StreamConsumer consumer,
5904 void* user_data) { 5851 void* user_data) {
5905 if (consumer == NULL) { 5852 if (consumer == NULL) {
5906 return false; 5853 return false;
5907 } 5854 }
5908 TimelineEventRecorder* timeline_recorder = Timeline::recorder(); 5855 TimelineEventRecorder* timeline_recorder = Timeline::recorder();
5909 if (timeline_recorder == NULL) { 5856 if (timeline_recorder == NULL) {
5910 // Nothing has been recorded. 5857 // Nothing has been recorded.
5911 return false; 5858 return false;
5912 } 5859 }
5913 Thread* T = Thread::Current(); 5860 Thread* T = Thread::Current();
5914 StackZone zone(T); 5861 StackZone zone(T);
5915 Timeline::ReclaimCachedBlocksFromThreads(); 5862 Timeline::ReclaimCachedBlocksFromThreads();
5916 JSONStream js; 5863 JSONStream js;
5917 TimelineEventFilter filter; 5864 TimelineEventFilter filter;
5918 timeline_recorder->PrintTraceEvent(&js, &filter); 5865 timeline_recorder->PrintTraceEvent(&js, &filter);
5919 const char* dart_events = 5866 return StreamTraceEvents(consumer, user_data, &js);
5920 DartTimelineEventIterator::PrintTraceEvents(timeline_recorder,
5921 zone.GetZone(),
5922 NULL);
5923 return StreamTraceEvents(consumer, user_data, &js, dart_events);
5924 } 5867 }
5925 5868
5926 5869
5927 DART_EXPORT Dart_Handle Dart_TimelineDuration(const char* label, 5870 DART_EXPORT Dart_Handle Dart_TimelineDuration(const char* label,
5928 int64_t start_micros, 5871 int64_t start_micros,
5929 int64_t end_micros) { 5872 int64_t end_micros) {
5930 Isolate* isolate = Isolate::Current(); 5873 Isolate* isolate = Isolate::Current();
5931 CHECK_ISOLATE(isolate); 5874 CHECK_ISOLATE(isolate);
5932 if (label == NULL) { 5875 if (label == NULL) {
5933 RETURN_NULL_ERROR(label); 5876 RETURN_NULL_ERROR(label);
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
6088 ApiReallocate); 6031 ApiReallocate);
6089 writer.WriteFullSnapshot(); 6032 writer.WriteFullSnapshot();
6090 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize(); 6033 *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize();
6091 *isolate_snapshot_size = writer.IsolateSnapshotSize(); 6034 *isolate_snapshot_size = writer.IsolateSnapshotSize();
6092 *instructions_snapshot_size = writer.InstructionsSnapshotSize(); 6035 *instructions_snapshot_size = writer.InstructionsSnapshotSize();
6093 6036
6094 return Api::Success(); 6037 return Api::Success();
6095 } 6038 }
6096 6039
6097 } // namespace dart 6040 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/bootstrap_natives.h ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698