OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
zra
2016/02/12 18:57:56
2016
| |
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. | |
4 // VMOptions=--error_on_bad_type --error_on_bad_override | |
5 | |
6 import 'dart:developer'; | |
7 import 'package:observatory/service_io.dart'; | |
8 import 'package:unittest/unittest.dart'; | |
9 | |
10 import 'test_helper.dart'; | |
11 | |
12 primeDartTimeline() { | |
13 while (true) { | |
14 Timeline.startSync('apple'); | |
15 Timeline.finishSync(); | |
16 debugger(); | |
17 } | |
18 } | |
19 | |
20 bool isDart(Map event) => event['cat'] == 'Dart'; | |
21 bool isMetaData(Map event) => event['ph'] == 'M'; | |
22 bool isNotMetaData(Map event) => !isMetaData(event); | |
23 bool isNotDartAndMetaData(Map event) => !isDart(event) && !isMetaData(event); | |
24 | |
25 List<Map> filterEvents(List<Map> events, filter) { | |
26 return events.where(filter).toList(); | |
27 } | |
28 | |
29 int dartEventCount; | |
30 | |
31 var tests = [ | |
32 hasStoppedAtBreakpoint, | |
33 (Isolate isolate) async { | |
34 // Get the flags. | |
35 Map flags = await isolate.vm.invokeRpcNoUpgrade('_getVMTimelineFlags', {}); | |
36 expect(flags['type'], 'TimelineFlags'); | |
37 // Confirm that 'Dart' is available. | |
38 expect(flags['availableStreams'].contains('Dart'), isTrue); | |
39 // Confirm that nothing is being recorded. | |
40 expect(flags['recordedStreams'].length, equals(0)); | |
41 }, | |
42 (Isolate isolate) async { | |
43 // Get the timeline. | |
44 Map result = await isolate.vm.invokeRpcNoUpgrade('_getVMTimeline', {}); | |
45 expect(result['type'], equals('_Timeline')); | |
46 expect(result['traceEvents'], new isInstanceOf<List>()); | |
47 // Confirm that it as no non-meta data events. | |
48 expect(filterEvents(result['traceEvents'], isNotMetaData).length, 0); | |
49 }, | |
50 (Isolate isolate) async { | |
51 // Enable the Dart category. | |
52 await isolate.vm.invokeRpcNoUpgrade('_setVMTimelineFlags', { | |
53 "recordedStreams": ["Dart"] | |
54 }); | |
55 }, | |
56 (Isolate isolate) async { | |
57 // Get the flags. | |
58 Map flags = await isolate.vm.invokeRpcNoUpgrade('_getVMTimelineFlags', {}); | |
59 expect(flags['type'], 'TimelineFlags'); | |
60 // Confirm that only Dart is being recorded. | |
61 expect(flags['recordedStreams'].length, equals(1)); | |
62 expect(flags['recordedStreams'].contains('Dart'), isTrue); | |
63 }, | |
64 resumeIsolate, | |
65 (Isolate isolate) async { | |
66 // Get the timeline. | |
67 Map result = await isolate.vm.invokeRpcNoUpgrade('_getVMTimeline', {}); | |
68 expect(result['type'], equals('_Timeline')); | |
69 expect(result['traceEvents'], new isInstanceOf<List>()); | |
70 // Confirm that Dart events are added. | |
71 expect(filterEvents(result['traceEvents'], isDart).length, greaterThan(0)); | |
72 // Confirm that zero non-Dart events are added. | |
73 expect( | |
74 filterEvents(result['traceEvents'], isNotDartAndMetaData).length, | |
75 equals(0)); | |
76 }, | |
77 hasStoppedAtBreakpoint, | |
78 (Isolate isolate) async { | |
79 // Disable the Dart category. | |
80 await isolate.vm.invokeRpcNoUpgrade('_setVMTimelineFlags', { | |
81 "recordedStreams": [] | |
82 }); | |
83 // Grab the timeline and remember the number of Dart events. | |
84 Map result = await isolate.vm.invokeRpcNoUpgrade('_getVMTimeline', {}); | |
85 expect(result['type'], equals('_Timeline')); | |
86 expect(result['traceEvents'], new isInstanceOf<List>()); | |
87 dartEventCount = filterEvents(result['traceEvents'], isDart).length; | |
88 }, | |
89 (Isolate isolate) async { | |
90 // Get the flags. | |
91 Map flags = await isolate.vm.invokeRpcNoUpgrade('_getVMTimelineFlags', {}); | |
92 expect(flags['type'], 'TimelineFlags'); | |
93 // Confirm that 'Dart' is not being recorded. | |
94 expect(flags['recordedStreams'].length, equals(0)); | |
95 }, | |
96 resumeIsolate, | |
97 (Isolate isolate) async { | |
98 // Grab the timeline and verify that we haven't added any new Dart events. | |
99 Map result = await isolate.vm.invokeRpcNoUpgrade('_getVMTimeline', {}); | |
100 expect(result['type'], equals('_Timeline')); | |
101 expect(result['traceEvents'], new isInstanceOf<List>()); | |
102 expect(filterEvents(result['traceEvents'], isDart).length, dartEventCount); | |
103 // Confirm that zero non-Dart events are added. | |
104 expect( | |
105 filterEvents(result['traceEvents'], isNotDartAndMetaData).length, | |
106 equals(0)); | |
107 }, | |
108 ]; | |
109 | |
110 main(args) async => runIsolateTests(args, | |
111 tests, | |
112 testeeConcurrent: primeDartTimeline); | |
OLD | NEW |