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

Side by Side Diff: sdk/lib/developer/timeline.dart

Issue 1430983003: Make asynchronous timeline support private for 1.13 (Closed) Base URL: git@github.com:dart-lang/sdk.git@dev
Patch Set: Created 5 years, 1 month 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 | « no previous file | no next file » | 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) 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 part of dart.developer; 5 part of dart.developer;
6 6
7 typedef dynamic TimelineSyncFunction(); 7 typedef dynamic TimelineSyncFunction();
8 8
9 /// Add to the timeline. 9 /// Add to the timeline.
10 class Timeline { 10 class Timeline {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 finishSync(); 48 finishSync();
49 } 49 }
50 } 50 }
51 51
52 static final List<_SyncBlock> _stack = new List<_SyncBlock>(); 52 static final List<_SyncBlock> _stack = new List<_SyncBlock>();
53 } 53 }
54 54
55 /// An asynchronous task on the timeline. Asynchronous tasks can live 55 /// An asynchronous task on the timeline. Asynchronous tasks can live
56 /// longer than the current event and can even be shared between isolates. 56 /// longer than the current event and can even be shared between isolates.
57 /// An asynchronous task can have many (nested) blocks. To share a 57 /// An asynchronous task can have many (nested) blocks. To share a
58 /// [TimelineTask] across isolates, you must construct a [TimelineTask] in 58 /// [_TimelineTask] across isolates, you must construct a [_TimelineTask] in
59 /// both isolates using the same [taskId] and [category]. 59 /// both isolates using the same [taskId] and [category].
60 class TimelineTask { 60 class _TimelineTask {
61 /// Create a task. [taskId] will be set by the system. 61 /// Create a task. [taskId] will be set by the system.
62 /// Optionally you can specify a [category] name. 62 /// Optionally you can specify a [category] name.
63 TimelineTask({String category: 'Dart'}) 63 _TimelineTask({String category: 'Dart'})
64 : _taskId = _getNextAsyncId(), 64 : _taskId = _getNextAsyncId(),
65 category = category { 65 category = category {
66 if (category is! String) { 66 if (category is! String) {
67 throw new ArgumentError.value(category, 67 throw new ArgumentError.value(category,
68 'category', 68 'category',
69 'Must be a String'); 69 'Must be a String');
70 } 70 }
71 } 71 }
72 72
73 /// Create a task with an explicit [taskId]. This is useful if you are 73 /// Create a task with an explicit [taskId]. This is useful if you are
74 /// passing a task between isolates. Optionally you can specify a [category] 74 /// passing a task between isolates. Optionally you can specify a [category]
75 /// name. 75 /// name.
76 TimelineTask.withTaskId(int taskId, {String category: 'Dart'}) 76 _TimelineTask.withTaskId(int taskId, {String category: 'Dart'})
77 : _taskId = taskId, 77 : _taskId = taskId,
78 category = category { 78 category = category {
79 if (taskId is! int) { 79 if (taskId is! int) {
80 throw new ArgumentError.value(taskId, 80 throw new ArgumentError.value(taskId,
81 'taskId', 81 'taskId',
82 'Must be an int'); 82 'Must be an int');
83 } 83 }
84 if (category is! String) { 84 if (category is! String) {
85 throw new ArgumentError.value(category, 85 throw new ArgumentError.value(category,
86 'category', 86 'category',
87 'Must be a String'); 87 'Must be a String');
88 } 88 }
89 } 89 }
90 90
91 /// Start a block in this task named [name]. Optionally takes 91 /// Start a block in this task named [name]. Optionally takes
92 /// a [Map] of [arguments]. 92 /// a [Map] of [arguments].
93 /// Returns an [AsyncBlock] which is used to finish this block. 93 /// Returns an [_AsyncBlock] which is used to finish this block.
94 AsyncBlock start(String name, {Map arguments}) { 94 _AsyncBlock start(String name, {Map arguments}) {
95 if (name is! String) { 95 if (name is! String) {
96 throw new ArgumentError.value(name, 96 throw new ArgumentError.value(name,
97 'name', 97 'name',
98 'Must be a String'); 98 'Must be a String');
99 } 99 }
100 var block = new AsyncBlock._(name, _taskId, category); 100 var block = new _AsyncBlock._(name, _taskId, category);
101 if (arguments is Map) { 101 if (arguments is Map) {
102 block.arguments.addAll(arguments); 102 block.arguments.addAll(arguments);
103 } 103 }
104 /// Emit start event. 104 /// Emit start event.
105 block._start(); 105 block._start();
106 return block; 106 return block;
107 } 107 }
108 108
109 /// Retrieve the asynchronous task's id. Can be used to construct a 109 /// Retrieve the asynchronous task's id. Can be used to construct a
110 /// [TimelineTask] in another isolate. 110 /// [_TimelineTask] in another isolate.
111 int get taskId => _taskId; 111 int get taskId => _taskId;
112 final int _taskId; 112 final int _taskId;
113 /// Retrieve the asynchronous task's category. Can be used to construct a 113 /// Retrieve the asynchronous task's category. Can be used to construct a
114 /// [TimelineTask] in another isolate. 114 /// [_TimelineTask] in another isolate.
115 final String category; 115 final String category;
116 } 116 }
117 117
118 /// An asynchronous block of time on the timeline. This block can be kept 118 /// An asynchronous block of time on the timeline. This block can be kept
119 /// open across isolate messages. 119 /// open across isolate messages.
120 class AsyncBlock { 120 class _AsyncBlock {
121 /// The category this block belongs to. 121 /// The category this block belongs to.
122 final String category; 122 final String category;
123 /// The name of this block. 123 /// The name of this block.
124 final String name; 124 final String name;
125 /// The asynchronous task id. 125 /// The asynchronous task id.
126 final int _taskId; 126 final int _taskId;
127 /// An (optional) set of arguments which will be serialized to JSON and 127 /// An (optional) set of arguments which will be serialized to JSON and
128 /// associated with this block. 128 /// associated with this block.
129 final Map arguments = {}; 129 final Map arguments = {};
130 bool _finished = false; 130 bool _finished = false;
131 131
132 AsyncBlock._(this.name, this._taskId, this.category); 132 _AsyncBlock._(this.name, this._taskId, this.category);
133 133
134 // Emit the start event. 134 // Emit the start event.
135 void _start() { 135 void _start() {
136 String argumentsAsJson = JSON.encode(arguments); 136 String argumentsAsJson = JSON.encode(arguments);
137 _reportTaskEvent(_getTraceClock(), 137 _reportTaskEvent(_getTraceClock(),
138 _taskId, 138 _taskId,
139 'b', 139 'b',
140 category, 140 category,
141 name, 141 name,
142 argumentsAsJson); 142 argumentsAsJson);
143 } 143 }
144 144
145 // Emit the finish event. 145 // Emit the finish event.
146 void _finish() { 146 void _finish() {
147 _reportTaskEvent(_getTraceClock(), 147 _reportTaskEvent(_getTraceClock(),
148 _taskId, 148 _taskId,
149 'e', 149 'e',
150 category, 150 category,
151 name, 151 name,
152 JSON.encode({})); 152 JSON.encode({}));
153 } 153 }
154 154
155 /// Finish this block. Cannot be called twice. 155 /// Finish this block. Cannot be called twice.
156 void finish() { 156 void finish() {
157 if (_finished) { 157 if (_finished) {
158 throw new StateError( 158 throw new StateError(
159 'It is illegal to call finish twice on the same AsyncBlock'); 159 'It is illegal to call finish twice on the same _AsyncBlock');
160 } 160 }
161 _finished = true; 161 _finished = true;
162 _finish(); 162 _finish();
163 } 163 }
164 164
165 /// Finishes this block when [future] completes. Returns a [Future] 165 /// Finishes this block when [future] completes. Returns a [Future]
166 /// chained to [future]. 166 /// chained to [future].
167 Future finishWhenComplete(Future future) { 167 Future finishWhenComplete(Future future) {
168 if (future is! Future) { 168 if (future is! Future) {
169 throw new ArgumentError.value(future, 169 throw new ArgumentError.value(future,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 String category, 222 String category,
223 String name, 223 String name,
224 String argumentsAsJson); 224 String argumentsAsJson);
225 225
226 /// Reports a complete synchronous event. 226 /// Reports a complete synchronous event.
227 external void _reportCompleteEvent(int start, 227 external void _reportCompleteEvent(int start,
228 int end, 228 int end,
229 String category, 229 String category,
230 String name, 230 String name,
231 String argumentsAsJson); 231 String argumentsAsJson);
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698