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

Side by Side Diff: utils/kernel-service/kernel-service.dart

Issue 2665753002: Reapply "Create an app snapshot of the Dart front end." (Closed)
Patch Set: merge Created 3 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 | « utils/kernel-service/BUILD.gn ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 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 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 library runtime.tools.kernel_service; 4 library runtime.tools.kernel_service;
5 5
6 // This is an interface to the Dart Kernel parser and Kernel binary generator. 6 // This is an interface to the Dart Kernel parser and Kernel binary generator.
7 // 7 //
8 // It is used by the kernel-isolate to load Dart source code and generate 8 // It is used by the kernel-isolate to load Dart source code and generate
9 // Kernel binary format. 9 // Kernel binary format.
10 // 10 //
11 // This is either invoked as the root script of the Kernel isolate when used 11 // This is either invoked as the root script of the Kernel isolate when used
12 // as a part of 12 // as a part of
13 // 13 //
14 // dart --dfe=runtime/tools/kernel-service.dart ... 14 // dart --dfe=utils/kernel-service/kernel-service.dart ...
15 // 15 //
16 // invocation or it is invoked as a standalone script to perform batch mode 16 // invocation or it is invoked as a standalone script to perform batch mode
17 // compilation requested via an HTTP interface 17 // compilation requested via an HTTP interface
18 // 18 //
19 // dart runtime/tools/kernel-service.dart --batch 19 // dart utils/kernel-service/kernel-service.dart --batch
20 // 20 //
21 // The port for the batch mode worker is controlled by DFE_WORKER_PORT 21 // The port for the batch mode worker is controlled by DFE_WORKER_PORT
22 // environment declarations (set by -DDFE_WORKER_PORT=... command line flag). 22 // environment declarations (set by -DDFE_WORKER_PORT=... command line flag).
23 // When not set (or set to 0) an ephemeral port returned by the OS is used 23 // When not set (or set to 0) an ephemeral port returned by the OS is used
24 // instead. 24 // instead.
25 // 25 //
26 // When this script is used as a Kernel isolate root script and DFE_WORKER_PORT 26 // When this script is used as a Kernel isolate root script and DFE_WORKER_PORT
27 // is set to non-zero value then Kernel isolate will forward all compilation 27 // is set to non-zero value then Kernel isolate will forward all compilation
28 // requests it receives to the batch worker on the given port. 28 // requests it receives to the batch worker on the given port.
29 // 29 //
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 request.response.statusCode = HttpStatus.INTERNAL_SERVER_ERROR; 305 request.response.statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
306 request.response.headers.contentType = ContentType.TEXT; 306 request.response.headers.contentType = ContentType.TEXT;
307 request.response.write(JSON.encode(result.toJson())); 307 request.response.write(JSON.encode(result.toJson()));
308 request.response.close(); 308 request.response.close();
309 } 309 }
310 }); 310 });
311 ProcessSignal.SIGTERM.watch().first.then((_) => server.close()); 311 ProcessSignal.SIGTERM.watch().first.then((_) => server.close());
312 }); 312 });
313 } 313 }
314 314
315 train(String scriptUri) {
316 // TODO(28532): Enable on Windows.
317 if (Platform.isWindows) return;
318
319 var tag = 1;
320 var responsePort = new RawReceivePort();
321 responsePort.handler = (response) {
322 if (response[0] == tag) {
323 // Success.
324 responsePort.close();
325 } else if (response[0] == -tag) {
326 // Compilation error.
327 throw response[4];
328 } else {
329 throw "Unexpected response: $response";
330 }
331 };
332 var request = [tag, responsePort.sendPort, scriptUri];
333 _processLoadRequest(request);
334 }
335
315 main([args]) { 336 main([args]) {
316 if (args?.length == 1 && args[0] == '--batch') { 337 if (args?.length == 1 && args[0] == '--batch') {
317 startBatchServer(); 338 startBatchServer();
339 } else if (args?.length == 2 && args[0] == '--train') {
340 // This entry point is used when creating an app snapshot. The argument
341 // provides a script to compile to warm-up generated code.
342 train(args[1]);
318 } else { 343 } else {
319 // Entry point for the Kernel isolate. 344 // Entry point for the Kernel isolate.
320 return new RawReceivePort()..handler = _processLoadRequest; 345 return new RawReceivePort()..handler = _processLoadRequest;
321 } 346 }
322 } 347 }
323 348
324 // This duplicates functionality from the Loader which we can't easily 349 // This duplicates functionality from the Loader which we can't easily
325 // access from here. 350 // access from here.
326 Uri _findPackagesFile(Uri base) async { 351 Uri _findPackagesFile(Uri base) async {
327 var dir = new File.fromUri(base).parent; 352 var dir = new File.fromUri(base).parent;
328 while (true) { 353 while (true) {
329 final packagesFile = dir.uri.resolve(".packages"); 354 final packagesFile = dir.uri.resolve(".packages");
330 if (await new File.fromUri(packagesFile).exists()) { 355 if (await new File.fromUri(packagesFile).exists()) {
331 return packagesFile; 356 return packagesFile;
332 } 357 }
333 if (dir.parent.path == dir.path) { 358 if (dir.parent.path == dir.path) {
334 break; 359 break;
335 } 360 }
336 dir = dir.parent; 361 dir = dir.parent;
337 } 362 }
338 return null; 363 return null;
339 } 364 }
OLDNEW
« no previous file with comments | « utils/kernel-service/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698