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

Side by Side Diff: runtime/vm/service/vmservice.dart

Issue 1030013002: Shutdown the service isolate when shutting down the VM (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 4
5 library vmservice; 5 library vmservice;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:isolate'; 9 import 'dart:isolate';
10 10
11 part 'client.dart'; 11 part 'client.dart';
12 part 'constants.dart'; 12 part 'constants.dart';
13 part 'running_isolate.dart'; 13 part 'running_isolate.dart';
14 part 'running_isolates.dart'; 14 part 'running_isolates.dart';
15 part 'message.dart'; 15 part 'message.dart';
16 part 'message_router.dart'; 16 part 'message_router.dart';
17 17
18 final RawReceivePort isolateLifecyclePort = new RawReceivePort(); 18 final RawReceivePort isolateLifecyclePort = new RawReceivePort();
19 final RawReceivePort scriptLoadPort = new RawReceivePort(); 19 final RawReceivePort scriptLoadPort = new RawReceivePort();
20 20
21 typedef ShutdownCallback();
22
21 class VMService extends MessageRouter { 23 class VMService extends MessageRouter {
22 static VMService _instance; 24 static VMService _instance;
23 /// Collection of currently connected clients. 25 /// Collection of currently connected clients.
24 final Set<Client> clients = new Set<Client>(); 26 final Set<Client> clients = new Set<Client>();
25 27
26 // A map encoding which clients are interested in which kinds of events. 28 // A map encoding which clients are interested in which kinds of events.
27 final Map<int, Set<Client>> eventMap = new Map<int, Set<Client>>(); 29 final Map<int, Set<Client>> eventMap = new Map<int, Set<Client>>();
28 30
29 /// Collection of currently running isolates. 31 /// Collection of currently running isolates.
30 RunningIsolates runningIsolates = new RunningIsolates(); 32 RunningIsolates runningIsolates = new RunningIsolates();
31 33
32 /// A port used to receive events from the VM. 34 /// A port used to receive events from the VM.
33 final RawReceivePort eventPort; 35 final RawReceivePort eventPort;
34 36
37 ShutdownCallback onShutdown;
38
35 void _addClient(Client client) { 39 void _addClient(Client client) {
36 clients.add(client); 40 clients.add(client);
37 } 41 }
38 42
39 void _removeClient(Client client) { 43 void _removeClient(Client client) {
40 clients.remove(client); 44 clients.remove(client);
41 } 45 }
42 46
43 int eventTypeCode(String eventType) { 47 int eventTypeCode(String eventType) {
44 switch(eventType) { 48 switch(eventType) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 void _eventMessageHandler(int eventType, dynamic eventMessage) { 91 void _eventMessageHandler(int eventType, dynamic eventMessage) {
88 var subscribers = eventMap[eventType]; 92 var subscribers = eventMap[eventType];
89 if (subscribers == null) { 93 if (subscribers == null) {
90 return; 94 return;
91 } 95 }
92 for (var subscriber in subscribers) { 96 for (var subscriber in subscribers) {
93 subscriber.post(null, eventMessage); 97 subscriber.post(null, eventMessage);
94 } 98 }
95 } 99 }
96 100
101 void _exit() {
102 if (onShutdown != null) {
103 onShutdown();
104 }
105 isolateLifecyclePort.close();
106 scriptLoadPort.close();
107 var clientList = clients.toList();
108 for (var client in clientList) {
109 client.close();
110 }
111 _onExit();
112 }
113
97 void messageHandler(message) { 114 void messageHandler(message) {
98 assert(message is List); 115 assert(message is List);
99 if (message is List && message.length == 4) { 116 if (message is List && (message.length == 4)) {
100 _controlMessageHandler(message[0], message[1], message[2], message[3]); 117 _controlMessageHandler(message[0], message[1], message[2], message[3]);
101 } else if (message is List && message.length == 2) { 118 } else if (message is List && (message.length == 2)) {
102 _eventMessageHandler(message[0], message[1]); 119 _eventMessageHandler(message[0], message[1]);
120 } else if (message is List && (message.length == 1)) {
121 assert(message[0] == Constants.SERVICE_EXIT_MESSAGE_ID);
122 _exit();
103 } else { 123 } else {
104 Logger.root.severe('Unexpected message: $message'); 124 Logger.root.severe('Unexpected message: $message');
105 } 125 }
106 } 126 }
107 127
108 void _notSupported(_) { 128 void _notSupported(_) {
109 throw new UnimplementedError('Service script loading not supported.'); 129 throw new UnimplementedError('Service script loading not supported.');
110 } 130 }
111 131
112 VMService._internal() 132 VMService._internal()
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 177
158 void _registerIsolate(int port_id, SendPort sp, String name) { 178 void _registerIsolate(int port_id, SendPort sp, String name) {
159 var service = new VMService(); 179 var service = new VMService();
160 service.runningIsolates.isolateStartup(port_id, sp, name); 180 service.runningIsolates.isolateStartup(port_id, sp, name);
161 } 181 }
162 182
163 void _setEventMask(int mask) 183 void _setEventMask(int mask)
164 native "VMService_SetEventMask"; 184 native "VMService_SetEventMask";
165 185
166 void _onStart() native "VMService_OnStart"; 186 void _onStart() native "VMService_OnStart";
187
188 void _onExit() native "VMService_OnExit";
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698