Chromium Code Reviews| Index: runtime/observatory/tests/service/pause_idle_isolate_test.dart |
| diff --git a/runtime/observatory/tests/service/pause_on_start_and_exit_test.dart b/runtime/observatory/tests/service/pause_idle_isolate_test.dart |
| similarity index 56% |
| copy from runtime/observatory/tests/service/pause_on_start_and_exit_test.dart |
| copy to runtime/observatory/tests/service/pause_idle_isolate_test.dart |
| index 93444d0a03b0e1e7ee386763c553185477cd1704..af0cc49220ffb2afa66df64d02f5c5113c244800 100644 |
| --- a/runtime/observatory/tests/service/pause_on_start_and_exit_test.dart |
| +++ b/runtime/observatory/tests/service/pause_idle_isolate_test.dart |
| @@ -7,76 +7,68 @@ import 'package:observatory/service_io.dart'; |
| import 'package:unittest/unittest.dart'; |
| import 'test_helper.dart'; |
| import 'dart:async'; |
| +import 'dart:io'; |
| +import 'dart:isolate'; |
| + |
| +var receivePort; |
| void testMain() { |
| - print('Hello'); |
| + receivePort = new ReceivePort(); |
| } |
| var tests = [ |
| (Isolate isolate) async { |
| - print('Getting stream...'); |
| Completer completer = new Completer(); |
| var stream = await isolate.vm.getEventStream(VM.kDebugStream); |
| - print('Subscribing...'); |
| var subscription; |
| subscription = stream.listen((ServiceEvent event) { |
| if (event.kind == ServiceEvent.kPauseStart) { |
| print('Received $event'); |
| subscription.cancel(); |
| completer.complete(); |
| - } else { |
| - print('Ignoring event $event'); |
| } |
| }); |
| - print('Subscribed. Pause event is ${isolate.pauseEvent}'); |
| if (isolate.pauseEvent != null && |
| isolate.pauseEvent.kind == ServiceEvent.kPauseStart) { |
| // Wait for the isolate to hit PauseStart. |
| subscription.cancel(); |
| - print('Subscription cancelled.'); |
| } else { |
| - print('Waiting for pause start event.'); |
| await completer.future; |
| } |
| print('Done waiting for pause event.'); |
| - // Grab the timestamp. |
| - var pausetime1 = isolate.pauseEvent.timestamp; |
| - expect(pausetime1, isNotNull); |
| - // Reload the isolate. |
| - await isolate.reload(); |
| - // Verify that it is the same. |
| - expect(pausetime1.millisecondsSinceEpoch, |
| - equals(isolate.pauseEvent.timestamp.millisecondsSinceEpoch)); |
| - |
| + // Wait for the isolate to pause due to interruption. |
| completer = new Completer(); |
| stream = await isolate.vm.getEventStream(VM.kDebugStream); |
| + bool receivedInterrupt = false; |
| subscription = stream.listen((ServiceEvent event) { |
| - if (event.kind == ServiceEvent.kPauseExit) { |
| - print('Received PauseExit'); |
| + print('Received $event'); |
| + if (event.kind == ServiceEvent.kPauseInterrupted) { |
| + receivedInterrupt = true; |
| subscription.cancel(); |
| completer.complete(); |
| } |
| }); |
| - print('Resuming...'); |
| - isolate.resume(); |
| + await isolate.resume(); |
| - // Wait for the isolate to hit PauseExit. |
| - await completer.future; |
| + // Wait for the isolate to become idle. We detect this by querying |
|
zra
2015/09/16 20:19:16
Unrelated to this CL, but this feels like a hole i
turnidge
2015/09/22 17:37:38
Perhaps a protocol user would want to be notified
|
| + // the stack until it becomes empty. |
| + var frameCount; |
| + do { |
| + var stack = await isolate.getStack(); |
| + frameCount = stack['frames'].length; |
| + print('frames: $frameCount'); |
| + sleep(const Duration(milliseconds:10)); |
| + } while (frameCount > 0); |
| - // Grab the timestamp. |
| - var pausetime2 = isolate.pauseEvent.timestamp; |
| - expect(pausetime2, isNotNull); |
| - // Reload the isolate. |
| - await isolate.reload(); |
| - // Verify that it is the same. |
| - expect(pausetime2.millisecondsSinceEpoch, |
| - equals(isolate.pauseEvent.timestamp.millisecondsSinceEpoch)); |
| - expect(pausetime2.millisecondsSinceEpoch, |
| - greaterThan(pausetime1.millisecondsSinceEpoch)); |
| + // Make sure that the isolate receives an interrupt even when it is |
| + // idle. (https://github.com/dart-lang/sdk/issues/24349) |
| + await isolate.pause(); |
| + await completer.future; |
| + expect(receivedInterrupt, isTrue); |
| }, |
| ]; |
| @@ -84,6 +76,5 @@ var tests = [ |
| main(args) => runIsolateTests(args, tests, |
| testeeConcurrent: testMain, |
| pause_on_start: true, |
| - pause_on_exit: true, |
| trace_service: true, |
| verbose_vm: true); |