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

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

Issue 1285643004: Allow stepping when paused at isolate start. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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 // VMOptions=--compile_all --error_on_bad_type --error_on_bad_override 4 // VMOptions=--compile_all --error_on_bad_type --error_on_bad_override
5 5
6 import 'dart:async'; 6 import 'dart:async';
7 import 'dart:isolate' as I; 7 import 'dart:isolate' as I;
8 8
9 import 'package:observatory/service_io.dart'; 9 import 'package:observatory/service_io.dart';
10 import 'package:unittest/unittest.dart'; 10 import 'package:unittest/unittest.dart';
(...skipping 22 matching lines...) Expand all
33 int numPaused(vm) { 33 int numPaused(vm) {
34 int paused = 0; 34 int paused = 0;
35 for (var isolate in vm.isolates) { 35 for (var isolate in vm.isolates) {
36 if (isolate.paused) { 36 if (isolate.paused) {
37 paused++; 37 paused++;
38 } 38 }
39 } 39 }
40 return paused; 40 return paused;
41 } 41 }
42 42
43 int numRunning(vm) {
44 int running = 0;
45 for (var isolate in vm.isolates) {
46 if (!isolate.paused) {
47 running++;
48 }
49 }
50 return running;
51 }
52
53 var tests = [ 43 var tests = [
54 (VM vm) async { 44 (VM vm) async {
55 // Wait for the testee to start all of the isolates. 45 Completer completer = new Completer();
56 if (vm.isolates.length != spawnCount + 1) { 46 var stream = await vm.getEventStream(VM.kIsolateStream);
57 await processServiceEvents(vm, VM.kIsolateStream, 47 if (vm.isolates.length < spawnCount + 1) {
58 (event, sub, completer) { 48 var subscription;
49 subscription = stream.listen((ServiceEvent event) {
59 if (event.kind == ServiceEvent.kIsolateStart) { 50 if (event.kind == ServiceEvent.kIsolateStart) {
60 if (vm.isolates.length == spawnCount + 1) { 51 if (vm.isolates.length == (spawnCount + 1)) {
61 sub.cancel(); 52 subscription.cancel();
62 completer.complete(null); 53 completer.complete(null);
63 } 54 }
64 } 55 }
65 }); 56 });
57 await completer.future;
66 } 58 }
67 expect(vm.isolates.length, spawnCount + 1); 59 expect(vm.isolates.length, spawnCount + 1);
68 }, 60 },
69 61
70 (VM vm) async { 62 (VM vm) async {
71 // Load each isolate. 63 // Load each isolate.
72 for (var isolate in vm.isolates) { 64 for (var isolate in vm.isolates) {
73 await isolate.load(); 65 await isolate.load();
74 } 66 }
75 }, 67 },
76 68
77 (VM vm) async { 69 (VM vm) async {
78 // Wait for all spawned isolates to hit pause-at-exit. 70 Completer completer = new Completer();
79 if (numPaused(vm) != spawnCount) { 71 var stream = await vm.getEventStream(VM.kDebugStream);
80 await processServiceEvents(vm, VM.kDebugStream, 72 if (numPaused(vm) < spawnCount) {
81 (event, sub, completer) { 73 var subscription;
74 subscription = stream.listen((ServiceEvent event) {
82 if (event.kind == ServiceEvent.kPauseExit) { 75 if (event.kind == ServiceEvent.kPauseExit) {
83 if (numPaused(vm) == spawnCount) { 76 if (numPaused(vm) == (spawnCount + 1)) {
84 sub.cancel(); 77 subscription.cancel();
85 completer.complete(null); 78 completer.complete(null);
86 } 79 }
87 } 80 }
88 }); 81 });
82 await completer.future;
89 } 83 }
90 expect(numPaused(vm), spawnCount); 84 expect(numPaused(vm), spawnCount + 1);
91 expect(numRunning(vm), 1);
92 }, 85 },
93 86
94 87
95 (VM vm) async { 88 (VM vm) async {
96 var resumedReceived = 0; 89 var resumedReceived = 0;
97 var eventsDone = processServiceEvents(vm, VM.kIsolateStream, 90 Completer completer = new Completer();
98 (event, sub, completer) { 91 var stream = await vm.getEventStream(VM.kIsolateStream);
92 var subscription;
93 subscription = stream.listen((ServiceEvent event) {
99 if (event.kind == ServiceEvent.kIsolateExit) { 94 if (event.kind == ServiceEvent.kIsolateExit) {
100 resumedReceived++; 95 resumedReceived++;
101 if (resumedReceived == resumeCount) { 96 if (resumedReceived >= resumeCount) {
102 sub.cancel(); 97 subscription.cancel();
103 completer.complete(null); 98 completer.complete(null);
104 } 99 }
105 } 100 }
106 }); 101 });
102
103 // Resume a subset of the isolates.
107 var resumesIssued = 0; 104 var resumesIssued = 0;
108 var isolateList = vm.isolates.toList(); 105 var isolateList = vm.isolates.toList();
109 for (var isolate in isolateList) { 106 for (var isolate in isolateList) {
110 if (isolate.name.endsWith('main')) { 107 if (isolate.name.endsWith('main')) {
111 continue; 108 continue;
112 } 109 }
113 try { 110 try {
114 resumesIssued++; 111 resumesIssued++;
115 await isolate.resume(); 112 await isolate.resume();
116 } catch(_) {} 113 } catch(_) {}
117 if (resumesIssued == resumeCount) { 114 if (resumesIssued == resumeCount) {
118 break; 115 break;
119 } 116 }
120 } 117 }
121 return eventsDone; 118 await completer.future;
122 }, 119 },
123 120
124 (VM vm) async { 121 (VM vm) async {
125 expect(numPaused(vm), spawnCount - resumeCount); 122 expect(numPaused(vm), spawnCount + 1 - resumeCount);
126 expect(numRunning(vm), 1);
127 }, 123 },
128 ]; 124 ];
129 125
130 main(args) async => runVMTests(args, tests, 126 main(args) async => runVMTests(args, tests,
131 testeeBefore: before, 127 testeeBefore: before,
132 testeeConcurrent: during, 128 testeeConcurrent: during,
133 pause_on_exit: true); 129 pause_on_exit: true);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698