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

Side by Side Diff: runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart

Issue 1441683005: Fast path Dart Timeline events with no arguments to avoid calling JSON.encode (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
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 | sdk/lib/developer/timeline.dart » ('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) 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 // VMOptions=--error_on_bad_type --error_on_bad_override --complete_timeline 4 // VMOptions=--error_on_bad_type --error_on_bad_override --complete_timeline
5 5
6 import 'dart:developer'; 6 import 'dart:developer';
7 import 'package:observatory/service_io.dart'; 7 import 'package:observatory/service_io.dart';
8 import 'package:unittest/unittest.dart'; 8 import 'package:unittest/unittest.dart';
9 9
10 import 'test_helper.dart'; 10 import 'test_helper.dart';
11 11
12 primeTimeline() { 12 primeTimeline() {
13 Timeline.startSync('apple'); 13 Timeline.startSync('apple');
14 Timeline.instantSync('ISYNC'); 14 Timeline.instantSync('ISYNC', arguments: {'fruit': 'banana'});
15 Timeline.finishSync(); 15 Timeline.finishSync();
16 TimelineTask task = new TimelineTask(); 16 TimelineTask task = new TimelineTask();
17 task.start('TASK1'); 17 task.start('TASK1');
18 task.instant('ITASK'); 18 task.instant('ITASK');
19 task.finish(); 19 task.finish();
20 } 20 }
21 21
22 List<Map> filterForDartEvents(List<Map> events) { 22 List<Map> filterForDartEvents(List<Map> events) {
23 return events.where((event) => event['cat'] == 'Dart').toList(); 23 return events.where((event) => event['cat'] == 'Dart').toList();
24 } 24 }
25 25
26 bool eventsContains(List<Map> events, String phase, String name) { 26 bool eventsContains(List<Map> events, String phase, String name) {
27 for (Map event in events) { 27 for (Map event in events) {
28 if ((event['ph'] == phase) && (event['name'] == name)) { 28 if ((event['ph'] == phase) && (event['name'] == name)) {
29 return true; 29 return true;
30 } 30 }
31 } 31 }
32 return false; 32 return false;
33 } 33 }
34 34
35 void allEventsHaveIsolateNumber(List<Map> events) {
36 for (Map event in events) {
37 if (event['ph'] == 'M') {
38 // Skip meta-data events.
39 continue;
40 }
41 if (event['name'] == 'Runnable' && event['ph'] == 'i') {
42 // Skip Runnable events which don't have an isolate.
43 continue;
44 }
45 if (event['cat'] == 'VM') {
46 // Skip VM category events which don't have an isolate.
47 continue;
48 }
49 Map arguments = event['args'];
50 expect(arguments, new isInstanceOf<Map>());
51 expect(arguments['isolateNumber'], new isInstanceOf<String>());
52 }
53 }
54
35 var tests = [ 55 var tests = [
36 (VM vm) async { 56 (VM vm) async {
37 Map result = await vm.invokeRpcNoUpgrade('_getVMTimeline', {}); 57 Map result = await vm.invokeRpcNoUpgrade('_getVMTimeline', {});
38 expect(result['type'], equals('_Timeline')); 58 expect(result['type'], equals('_Timeline'));
39 expect(result['traceEvents'], new isInstanceOf<List>()); 59 expect(result['traceEvents'], new isInstanceOf<List>());
40 List<Map> dartEvents = filterForDartEvents(result['traceEvents']); 60 List<Map> dartEvents = filterForDartEvents(result['traceEvents']);
41 expect(dartEvents.length, equals(5)); 61 expect(dartEvents.length, equals(5));
62 allEventsHaveIsolateNumber(dartEvents);
63 allEventsHaveIsolateNumber(result['traceEvents']);
42 expect(eventsContains(dartEvents, 'I', 'ISYNC'), isTrue); 64 expect(eventsContains(dartEvents, 'I', 'ISYNC'), isTrue);
43 expect(eventsContains(dartEvents, 'X', 'apple'), isTrue); 65 expect(eventsContains(dartEvents, 'X', 'apple'), isTrue);
44 expect(eventsContains(dartEvents, 'b', 'TASK1'), isTrue); 66 expect(eventsContains(dartEvents, 'b', 'TASK1'), isTrue);
45 expect(eventsContains(dartEvents, 'e', 'TASK1'), isTrue); 67 expect(eventsContains(dartEvents, 'e', 'TASK1'), isTrue);
46 expect(eventsContains(dartEvents, 'n', 'ITASK'), isTrue); 68 expect(eventsContains(dartEvents, 'n', 'ITASK'), isTrue);
47 expect(eventsContains(dartEvents, 'q', 'ITASK'), isFalse); 69 expect(eventsContains(dartEvents, 'q', 'ITASK'), isFalse);
48 }, 70 },
49 ]; 71 ];
50 72
51 main(args) async => runVMTests(args, tests, testeeBefore: primeTimeline); 73 main(args) async => runVMTests(args, tests, testeeBefore: primeTimeline);
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/developer/timeline.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698