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

Side by Side Diff: pkg/analyzer/lib/instrumentation/instrumentation.dart

Issue 1413403007: Wait for InstrumentationService.shutdown() before exit(0). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 instrumentation; 5 library instrumentation;
6 6
7 import 'dart:async';
7 import 'dart:convert'; 8 import 'dart:convert';
8 9
9 import 'package:analyzer/task/model.dart'; 10 import 'package:analyzer/task/model.dart';
10 11
11 /** 12 /**
12 * A container with analysis performance constants. 13 * A container with analysis performance constants.
13 */ 14 */
14 class AnalysisPerformanceKind { 15 class AnalysisPerformanceKind {
15 static const String FULL = 'analysis_full'; 16 static const String FULL = 'analysis_full';
16 static const String INCREMENTAL = 'analysis_incremental'; 17 static const String INCREMENTAL = 'analysis_incremental';
(...skipping 19 matching lines...) Expand all
36 * This method should only be used for logging high priority messages, such as 37 * This method should only be used for logging high priority messages, such as
37 * exceptions that cause the server to shutdown. 38 * exceptions that cause the server to shutdown.
38 */ 39 */
39 void logWithPriority(String message); 40 void logWithPriority(String message);
40 41
41 /** 42 /**
42 * Signal that the client is done communicating with the instrumentation 43 * Signal that the client is done communicating with the instrumentation
43 * server. This method should be invoked exactly one time and no other methods 44 * server. This method should be invoked exactly one time and no other methods
44 * should be invoked on this instance after this method has been invoked. 45 * should be invoked on this instance after this method has been invoked.
45 */ 46 */
46 void shutdown(); 47 Future shutdown();
47 } 48 }
48 49
49 /** 50 /**
50 * The interface used by client code to communicate with an instrumentation 51 * The interface used by client code to communicate with an instrumentation
51 * server by wrapping an [InstrumentationServer]. 52 * server by wrapping an [InstrumentationServer].
52 */ 53 */
53 class InstrumentationService { 54 class InstrumentationService {
54 /** 55 /**
55 * An instrumentation service that will not log any instrumentation data. 56 * An instrumentation service that will not log any instrumentation data.
56 */ 57 */
(...skipping 19 matching lines...) Expand all
76 * if instrumentation data should not be logged. 77 * if instrumentation data should not be logged.
77 */ 78 */
78 InstrumentationServer _instrumentationServer; 79 InstrumentationServer _instrumentationServer;
79 80
80 /** 81 /**
81 * Counter used to generate unique ID's for [logSubprocessStart]. 82 * Counter used to generate unique ID's for [logSubprocessStart].
82 */ 83 */
83 int _subprocessCounter = 0; 84 int _subprocessCounter = 0;
84 85
85 /** 86 /**
86 * Initialize a newly created instrumentation service to comunicate with the 87 * Initialize a newly created instrumentation service to communicate with the
87 * given [instrumentationServer]. 88 * given [instrumentationServer].
88 */ 89 */
89 InstrumentationService(this._instrumentationServer); 90 InstrumentationService(this._instrumentationServer);
90 91
91 /** 92 /**
92 * Return `true` if this [InstrumentationService] was initialized with a 93 * Return `true` if this [InstrumentationService] was initialized with a
93 * non-`null` server (and hence instrumentation is active). 94 * non-`null` server (and hence instrumentation is active).
94 */ 95 */
95 bool get isActive => _instrumentationServer != null; 96 bool get isActive => _instrumentationServer != null;
96 97
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 210
210 /** 211 /**
211 * Log that a response has been sent to the client. 212 * Log that a response has been sent to the client.
212 */ 213 */
213 void logResponse(String response) { 214 void logResponse(String response) {
214 _log(TAG_RESPONSE, response); 215 _log(TAG_RESPONSE, response);
215 } 216 }
216 217
217 /** 218 /**
218 * Log the result of executing a subprocess. [subprocessId] should be the 219 * Log the result of executing a subprocess. [subprocessId] should be the
219 * unique IDreturned by [logSubprocessStart]. 220 * unique ID returned by [logSubprocessStart].
220 */ 221 */
221 void logSubprocessResult( 222 void logSubprocessResult(
222 int subprocessId, int exitCode, String stdout, String stderr) { 223 int subprocessId, int exitCode, String stdout, String stderr) {
223 if (_instrumentationServer != null) { 224 if (_instrumentationServer != null) {
224 _instrumentationServer.log(_join([ 225 _instrumentationServer.log(_join([
225 TAG_SUBPROCESS_RESULT, 226 TAG_SUBPROCESS_RESULT,
226 subprocessId.toString(), 227 subprocessId.toString(),
227 exitCode.toString(), 228 exitCode.toString(),
228 JSON.encode(stdout), 229 JSON.encode(stdout),
229 JSON.encode(stderr) 230 JSON.encode(stderr)
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 _instrumentationServer 284 _instrumentationServer
284 .log(_join([TAG_WATCH_EVENT, folderPath, filePath, changeType])); 285 .log(_join([TAG_WATCH_EVENT, folderPath, filePath, changeType]));
285 } 286 }
286 } 287 }
287 288
288 /** 289 /**
289 * Signal that the client is done communicating with the instrumentation 290 * Signal that the client is done communicating with the instrumentation
290 * server. This method should be invoked exactly one time and no other methods 291 * server. This method should be invoked exactly one time and no other methods
291 * should be invoked on this instance after this method has been invoked. 292 * should be invoked on this instance after this method has been invoked.
292 */ 293 */
293 void shutdown() { 294 Future shutdown() async {
294 if (_instrumentationServer != null) { 295 if (_instrumentationServer != null) {
295 _instrumentationServer.shutdown(); 296 await _instrumentationServer.shutdown();
296 _instrumentationServer = null; 297 _instrumentationServer = null;
297 } 298 }
298 } 299 }
299 300
300 /** 301 /**
301 * Write an escaped version of the given [field] to the given [buffer]. 302 * Write an escaped version of the given [field] to the given [buffer].
302 */ 303 */
303 void _escape(StringBuffer buffer, String field) { 304 void _escape(StringBuffer buffer, String field) {
304 int index = field.indexOf(':'); 305 int index = field.indexOf(':');
305 if (index < 0) { 306 if (index < 0) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 367 }
367 368
368 @override 369 @override
369 void logWithPriority(String message) { 370 void logWithPriority(String message) {
370 for (InstrumentationServer server in _servers) { 371 for (InstrumentationServer server in _servers) {
371 server.logWithPriority(message); 372 server.logWithPriority(message);
372 } 373 }
373 } 374 }
374 375
375 @override 376 @override
376 void shutdown() { 377 Future shutdown() async {
377 for (InstrumentationServer server in _servers) { 378 for (InstrumentationServer server in _servers) {
378 server.shutdown(); 379 await server.shutdown();
379 } 380 }
380 } 381 }
381 } 382 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698