Chromium Code Reviews| Index: sdk/lib/developer/timeline.dart |
| diff --git a/sdk/lib/developer/timeline.dart b/sdk/lib/developer/timeline.dart |
| index 55de99dbb92317ec1d63e830a1e35a11aa95f040..7f4d8a9d62dc0ba3b54db42ca0349ac6d7c07e2f 100644 |
| --- a/sdk/lib/developer/timeline.dart |
| +++ b/sdk/lib/developer/timeline.dart |
| @@ -44,17 +44,14 @@ class Timeline { |
| 'name', |
| 'Must be a String'); |
| } |
| - Map instantArguments = { |
| - 'isolateNumber': '${Timeline._isolateId}' |
| - }; |
| + Map instantArguments = {}; |
|
zra
2015/11/13 02:54:01
Since _argumentsAsJson does the right thing with n
Cutch
2015/11/13 15:38:39
Done.
|
| if (arguments is Map) { |
| instantArguments.addAll(arguments); |
| } |
| - String argumentsAsJson = JSON.encode(instantArguments); |
| _reportInstantEvent(_getTraceClock(), |
| 'Dart', |
| name, |
| - argumentsAsJson); |
| + _argumentsAsJson(instantArguments)); |
| } |
| @@ -72,8 +69,8 @@ class Timeline { |
| } |
| static final List<_SyncBlock> _stack = new List<_SyncBlock>(); |
| - |
| static final int _isolateId = _getIsolateNum(); |
| + static final String _isolateIdString = '${_isolateId}'; |
| } |
| /// An asynchronous task on the timeline. An asynchronous task can have many |
| @@ -121,19 +118,16 @@ class TimelineTask { |
| 'name', |
| 'Must be a String'); |
| } |
| - Map instantArguments = { |
| - 'isolateNumber': '${Timeline._isolateId}' |
| - }; |
| + Map instantArguments = {}; |
|
zra
2015/11/13 02:54:01
ditto
Cutch
2015/11/13 15:38:39
Done.
|
| if (arguments is Map) { |
| instantArguments.addAll(arguments); |
| } |
| - String argumentsAsJson = JSON.encode(instantArguments); |
| _reportTaskEvent(_getTraceClock(), |
| _taskId, |
| 'n', |
| 'Dart', |
| name, |
| - argumentsAsJson); |
| + _argumentsAsJson(instantArguments)); |
| } |
| /// Finish the last synchronous operation that was started. |
| @@ -180,14 +174,12 @@ class _AsyncBlock { |
| // Emit the start event. |
| void _start() { |
| - arguments['isolateNumber'] = '${Timeline._isolateId}'; |
| - String argumentsAsJson = JSON.encode(arguments); |
| _reportTaskEvent(_getTraceClock(), |
| _taskId, |
| 'b', |
| category, |
| name, |
| - argumentsAsJson); |
| + _argumentsAsJson(arguments)); |
| } |
| // Emit the finish event. |
| @@ -197,7 +189,7 @@ class _AsyncBlock { |
| 'e', |
| category, |
| name, |
| - JSON.encode({})); |
| + _argumentsAsJson(null)); |
| } |
| } |
| @@ -220,20 +212,27 @@ class _SyncBlock { |
| /// Finish this block of time. At this point, this block can no longer be |
| /// used. |
| void finish() { |
| - var end = _getTraceClock(); |
| - |
| - arguments['isolateNumber'] = '${Timeline._isolateId}'; |
| - |
| - // Encode arguments map as JSON before reporting. |
| - var argumentsAsJson = JSON.encode(arguments); |
| - |
| // Report event to runtime. |
| _reportCompleteEvent(_start, |
| - end, |
| + _getTraceClock(), |
| category, |
| name, |
| - argumentsAsJson); |
| + _argumentsAsJson(arguments)); |
| + } |
| +} |
| + |
| +String _fastPathArguments; |
| +String _argumentsAsJson(Map arguments) { |
| + if ((arguments == null) || (arguments.length == 0)) { |
| + // Fast path no arguments. Avoid calling JSON.encode. |
| + if (_fastPathArguments == null) { |
| + _fastPathArguments = '{"isolateNumber":"${Timeline._isolateId}"}'; |
| + } |
| + return _fastPathArguments; |
| } |
| + // Add isolateNumber to arguments map. |
| + arguments['isolateNumber'] = Timeline._isolateIdString; |
| + return JSON.encode(arguments); |
| } |
| /// Returns the next async task id. |
| @@ -264,4 +263,4 @@ external void _reportCompleteEvent(int start, |
| external void _reportInstantEvent(int start, |
| String category, |
| String name, |
| - String argumentsAsJson); |
| + String argumentsAsJson); |