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

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

Issue 1690333002: Add fine grained command line and service protocol control over timeline streams recording (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « runtime/observatory/lib/src/elements/timeline_page.dart ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
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);
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/timeline_page.dart ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698