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

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

Issue 1985813002: Add an intrinsified early out path for Dart timeline calls (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 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) 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 const bool _isProduct = const bool.fromEnvironment("dart.vm.product"); 7 const bool _isProduct = const bool.fromEnvironment("dart.vm.product");
8 8
9 typedef dynamic TimelineSyncFunction(); 9 typedef dynamic TimelineSyncFunction();
10 typedef Future TimelineAsyncFunction(); 10 typedef Future TimelineAsyncFunction();
11 11
12 /// Add to the timeline. 12 /// Add to the timeline.
13 class Timeline { 13 class Timeline {
14 /// Start a synchronous operation labeled [name]. Optionally takes 14 /// Start a synchronous operation labeled [name]. Optionally takes
15 /// a [Map] of [arguments]. This operation must be finished before 15 /// a [Map] of [arguments]. This operation must be finished before
16 /// returning to the event queue. 16 /// returning to the event queue.
17 static void startSync(String name, {Map arguments}) { 17 static void startSync(String name, {Map arguments}) {
18 if (_isProduct) { 18 if (_isProduct) {
19 return; 19 return;
20 } 20 }
21 if (name is! String) { 21 if (name is! String) {
22 throw new ArgumentError.value(name, 22 throw new ArgumentError.value(name,
23 'name', 23 'name',
24 'Must be a String'); 24 'Must be a String');
25 } 25 }
26 if (!_isDartStreamEnabled()) {
27 // Push a null onto the stack and return.
28 _stack.add(null);
29 return;
30 }
26 var block = new _SyncBlock._(name, _getTraceClock(), _getThreadCpuClock()); 31 var block = new _SyncBlock._(name, _getTraceClock(), _getThreadCpuClock());
27 if (arguments is Map) { 32 if (arguments is Map) {
28 block._appendArguments(arguments); 33 block._appendArguments(arguments);
29 } 34 }
30 _stack.add(block); 35 _stack.add(block);
31 } 36 }
32 37
33 /// Finish the last synchronous operation that was started. 38 /// Finish the last synchronous operation that was started.
34 static void finishSync() { 39 static void finishSync() {
35 if (_isProduct) { 40 if (_isProduct) {
36 return; 41 return;
37 } 42 }
38 if (_stack.length == 0) { 43 if (_stack.length == 0) {
39 throw new StateError( 44 throw new StateError(
40 'Uneven calls to startSync and finishSync'); 45 'Uneven calls to startSync and finishSync');
41 } 46 }
42 // Pop top item off of stack. 47 // Pop top item off of stack.
43 var block = _stack.removeLast(); 48 var block = _stack.removeLast();
49 if (block == null) {
50 // Dart stream was disabled when startSync was called.
51 return;
52 }
44 // Finish it. 53 // Finish it.
45 block.finish(); 54 block.finish();
46 } 55 }
47 56
48 /// Emit an instant event. 57 /// Emit an instant event.
49 static void instantSync(String name, {Map arguments}) { 58 static void instantSync(String name, {Map arguments}) {
50 if (_isProduct) { 59 if (_isProduct) {
51 return; 60 return;
52 } 61 }
53 if (name is! String) { 62 if (name is! String) {
54 throw new ArgumentError.value(name, 63 throw new ArgumentError.value(name,
55 'name', 64 'name',
56 'Must be a String'); 65 'Must be a String');
57 } 66 }
67 if (!_isDartStreamEnabled()) {
68 // Stream is disabled.
69 return;
70 }
58 Map instantArguments; 71 Map instantArguments;
59 if (arguments is Map) { 72 if (arguments is Map) {
60 instantArguments = new Map.from(arguments); 73 instantArguments = new Map.from(arguments);
61 } 74 }
62 _reportInstantEvent(_getTraceClock(), 75 _reportInstantEvent(_getTraceClock(),
63 'Dart', 76 'Dart',
64 name, 77 name,
65 _argumentsAsJson(instantArguments)); 78 _argumentsAsJson(instantArguments));
66 } 79 }
67 80
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 if (_fastPathArguments == null) { 284 if (_fastPathArguments == null) {
272 _fastPathArguments = '{"isolateNumber":"${Timeline._isolateId}"}'; 285 _fastPathArguments = '{"isolateNumber":"${Timeline._isolateId}"}';
273 } 286 }
274 return _fastPathArguments; 287 return _fastPathArguments;
275 } 288 }
276 // Add isolateNumber to arguments map. 289 // Add isolateNumber to arguments map.
277 arguments['isolateNumber'] = Timeline._isolateIdString; 290 arguments['isolateNumber'] = Timeline._isolateIdString;
278 return JSON.encode(arguments); 291 return JSON.encode(arguments);
279 } 292 }
280 293
294 /// Returns true if the Dart Timeline stream is enabled.
295 external bool _isDartStreamEnabled();
296
281 /// Returns the next async task id. 297 /// Returns the next async task id.
282 external int _getNextAsyncId(); 298 external int _getNextAsyncId();
283 299
284 /// Returns the current value from the trace clock. 300 /// Returns the current value from the trace clock.
285 external int _getTraceClock(); 301 external int _getTraceClock();
286 302
287 /// Returns the current value from the thread CPU usage clock. 303 /// Returns the current value from the thread CPU usage clock.
288 external int _getThreadCpuClock(); 304 external int _getThreadCpuClock();
289 305
290 /// Returns the isolate's main port number. 306 /// Returns the isolate's main port number.
(...skipping 12 matching lines...) Expand all
303 int startCpu, 319 int startCpu,
304 String category, 320 String category,
305 String name, 321 String name,
306 String argumentsAsJson); 322 String argumentsAsJson);
307 323
308 /// Reports an instant event. 324 /// Reports an instant event.
309 external void _reportInstantEvent(int start, 325 external void _reportInstantEvent(int start,
310 String category, 326 String category,
311 String name, 327 String name,
312 String argumentsAsJson); 328 String argumentsAsJson);
OLDNEW
« runtime/vm/intrinsifier_mips.cc ('K') | « sdk/lib/_internal/js_runtime/lib/developer_patch.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698