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

Side by Side Diff: runtime/bin/vmservice/loader.dart

Issue 2186423002: Only reload libraries when they may have been modified. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fixed bug with prefixed imports Created 4 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 4
5 part of vmservice_io; 5 part of vmservice_io;
6 6
7 _sanitizeWindowsPath(path) { 7 _sanitizeWindowsPath(path) {
8 // For Windows we need to massage the paths a bit according to 8 // For Windows we need to massage the paths a bit according to
9 // http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx 9 // http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx
10 // 10 //
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 _log(msg) { 312 _log(msg) {
313 print("% $msg"); 313 print("% $msg");
314 } 314 }
315 315
316 var _httpClient; 316 var _httpClient;
317 317
318 // Send a response to the requesting isolate. 318 // Send a response to the requesting isolate.
319 void _sendResourceResponse(SendPort sp, 319 void _sendResourceResponse(SendPort sp,
320 int tag, 320 int tag,
321 Uri uri, 321 Uri uri,
322 Uri resolvedUri,
322 String libraryUrl, 323 String libraryUrl,
323 dynamic data) { 324 dynamic data) {
324 assert((data is List<int>) || (data is String)); 325 assert((data is List<int>) || (data is String));
325 var msg = new List(4); 326 var msg = new List(5);
326 if (data is String) { 327 if (data is String) {
327 // We encountered an error, flip the sign of the tag to indicate that. 328 // We encountered an error, flip the sign of the tag to indicate that.
328 tag = -tag; 329 tag = -tag;
329 if (libraryUrl == null) { 330 if (libraryUrl == null) {
330 data = 'Could not load "$uri": $data'; 331 data = 'Could not load "$uri": $data';
331 } else { 332 } else {
332 data = 'Could not import "$uri" from "$libraryUrl": $data'; 333 data = 'Could not import "$uri" from "$libraryUrl": $data';
333 } 334 }
334 } 335 }
335 msg[0] = tag; 336 msg[0] = tag;
336 msg[1] = uri.toString(); 337 msg[1] = uri.toString();
337 msg[2] = libraryUrl; 338 msg[2] = resolvedUri.toString();
338 msg[3] = data; 339 msg[3] = libraryUrl;
340 msg[4] = data;
339 sp.send(msg); 341 sp.send(msg);
340 } 342 }
341 343
342 // Send a response to the requesting isolate. 344 // Send a response to the requesting isolate.
343 void _sendExtensionImportResponse(SendPort sp, 345 void _sendExtensionImportResponse(SendPort sp,
344 Uri uri, 346 Uri uri,
345 String libraryUrl, 347 String libraryUrl,
346 String resolvedUri) { 348 String resolvedUri) {
347 var msg = new List(4); 349 var msg = new List(4);
348 int tag = _Dart_kImportExtension; 350 int tag = _Dart_kImportExtension;
(...skipping 20 matching lines...) Expand all
369 _httpClient.getUrl(resolvedUri) 371 _httpClient.getUrl(resolvedUri)
370 .then((HttpClientRequest request) => request.close()) 372 .then((HttpClientRequest request) => request.close())
371 .then((HttpClientResponse response) { 373 .then((HttpClientResponse response) {
372 var builder = new BytesBuilder(copy: false); 374 var builder = new BytesBuilder(copy: false);
373 response.listen( 375 response.listen(
374 builder.add, 376 builder.add,
375 onDone: () { 377 onDone: () {
376 if (response.statusCode != 200) { 378 if (response.statusCode != 200) {
377 var msg = "Failure getting $resolvedUri:\n" 379 var msg = "Failure getting $resolvedUri:\n"
378 " ${response.statusCode} ${response.reasonPhrase}"; 380 " ${response.statusCode} ${response.reasonPhrase}";
379 _sendResourceResponse(sp, tag, uri, libraryUrl, msg); 381 _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, msg);
380 } else { 382 } else {
381 _sendResourceResponse(sp, tag, uri, libraryUrl, 383 _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl,
382 builder.takeBytes()); 384 builder.takeBytes());
383 } 385 }
384 }, 386 },
385 onError: (e) { 387 onError: (e) {
386 _sendResourceResponse(sp, tag, uri, libraryUrl, e.toString()); 388 _sendResourceResponse(
389 sp, tag, uri, resolvedUri, libraryUrl, e.toString());
387 }); 390 });
388 }) 391 })
389 .catchError((e) { 392 .catchError((e) {
390 _sendResourceResponse(sp, tag, uri, libraryUrl, e.toString()); 393 _sendResourceResponse(
394 sp, tag, uri, resolvedUri, libraryUrl, e.toString());
391 }); 395 });
392 // It's just here to push an event on the event loop so that we invoke the 396 // It's just here to push an event on the event loop so that we invoke the
393 // scheduled microtasks. 397 // scheduled microtasks.
394 Timer.run(() {}); 398 Timer.run(() {});
395 } 399 }
396 400
397 void _loadFile(SendPort sp, 401 void _loadFile(SendPort sp,
398 int tag, 402 int tag,
399 Uri uri, 403 Uri uri,
400 Uri resolvedUri, 404 Uri resolvedUri,
401 String libraryUrl) { 405 String libraryUrl) {
402 var path = resolvedUri.toFilePath(); 406 var path = resolvedUri.toFilePath();
403 var sourceFile = new File(path); 407 var sourceFile = new File(path);
404 sourceFile.readAsBytes().then((data) { 408 sourceFile.readAsBytes().then((data) {
405 _sendResourceResponse(sp, tag, uri, libraryUrl, data); 409 _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, data);
406 }, 410 },
407 onError: (e) { 411 onError: (e) {
408 _sendResourceResponse(sp, tag, uri, libraryUrl, e.toString()); 412 _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, e.toString());
409 }); 413 });
410 } 414 }
411 415
412 void _loadDataUri(SendPort sp, 416 void _loadDataUri(SendPort sp,
413 int tag, 417 int tag,
414 Uri uri, 418 Uri uri,
415 Uri resolvedUri, 419 Uri resolvedUri,
416 String libraryUrl) { 420 String libraryUrl) {
417 try { 421 try {
418 var mime = uri.data.mimeType; 422 var mime = uri.data.mimeType;
419 if ((mime != "application/dart") && 423 if ((mime != "application/dart") &&
420 (mime != "text/plain")) { 424 (mime != "text/plain")) {
421 throw "MIME-type must be application/dart or text/plain: $mime given."; 425 throw "MIME-type must be application/dart or text/plain: $mime given.";
422 } 426 }
423 var charset = uri.data.charset; 427 var charset = uri.data.charset;
424 if ((charset != "utf-8") && 428 if ((charset != "utf-8") &&
425 (charset != "US-ASCII")) { 429 (charset != "US-ASCII")) {
426 // The C++ portion of the embedder assumes UTF-8. 430 // The C++ portion of the embedder assumes UTF-8.
427 throw "Only utf-8 or US-ASCII encodings are supported: $charset given."; 431 throw "Only utf-8 or US-ASCII encodings are supported: $charset given.";
428 } 432 }
429 _sendResourceResponse(sp, tag, uri, libraryUrl, uri.data.contentAsBytes()); 433 _sendResourceResponse(
434 sp, tag, uri, resolvedUri, libraryUrl, uri.data.contentAsBytes());
430 } catch (e) { 435 } catch (e) {
431 _sendResourceResponse(sp, tag, uri, libraryUrl, 436 _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl,
432 "Invalid data uri ($uri):\n $e"); 437 "Invalid data uri ($uri):\n $e");
433 } 438 }
434 } 439 }
435 440
436 // Loading a package URI needs to first map the package name to a loadable 441 // Loading a package URI needs to first map the package name to a loadable
437 // URI. 442 // URI.
438 _loadPackage(IsolateLoaderState loaderState, 443 _loadPackage(IsolateLoaderState loaderState,
439 SendPort sp, 444 SendPort sp,
440 bool traceLoading, 445 bool traceLoading,
441 int tag, 446 int tag,
442 Uri uri, 447 Uri uri,
443 Uri resolvedUri, 448 Uri resolvedUri,
444 String libraryUrl) { 449 String libraryUrl) {
445 if (loaderState._packagesReady) { 450 if (loaderState._packagesReady) {
446 var resolvedUri; 451 var resolvedUri;
447 try { 452 try {
448 resolvedUri = loaderState._resolvePackageUri(uri); 453 resolvedUri = loaderState._resolvePackageUri(uri);
449 } catch (e, s) { 454 } catch (e, s) {
450 if (traceLoading) { 455 if (traceLoading) {
451 _log("Exception ($e) when resolving package URI: $uri"); 456 _log("Exception ($e) when resolving package URI: $uri");
452 } 457 }
453 // Report error. 458 // Report error.
454 _sendResourceResponse(sp, 459 _sendResourceResponse(sp,
455 tag, 460 tag,
456 uri, 461 uri,
462 resolvedUri,
457 libraryUrl, 463 libraryUrl,
458 e.toString()); 464 e.toString());
459 return; 465 return;
460 } 466 }
461 // Recursively call with the new resolved uri. 467 // Recursively call with the new resolved uri.
462 _handleResourceRequest(loaderState, 468 _handleResourceRequest(loaderState,
463 sp, 469 sp,
464 traceLoading, 470 traceLoading,
465 tag, 471 tag,
466 uri, 472 uri,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 _loadPackage(loaderState, 516 _loadPackage(loaderState,
511 sp, 517 sp,
512 traceLoading, 518 traceLoading,
513 tag, 519 tag,
514 uri, 520 uri,
515 resolvedUri, 521 resolvedUri,
516 libraryUrl); 522 libraryUrl);
517 } else { 523 } else {
518 _sendResourceResponse(sp, tag, 524 _sendResourceResponse(sp, tag,
519 uri, 525 uri,
526 resolvedUri,
520 libraryUrl, 527 libraryUrl,
521 'Unknown scheme (${resolvedUri.scheme}) for ' 528 'Unknown scheme (${resolvedUri.scheme}) for '
522 '$resolvedUri'); 529 '$resolvedUri');
523 } 530 }
524 } 531 }
525 532
526 // Handling of packages requests. Finding and parsing of .packages file or 533 // Handling of packages requests. Finding and parsing of .packages file or
527 // packages/ directories. 534 // packages/ directories.
528 const _LF = 0x0A; 535 const _LF = 0x0A;
529 const _CR = 0x0D; 536 const _CR = 0x0D;
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 _log('Unknown scheme (${pathUri.scheme}) in $pathUri.'); 1065 _log('Unknown scheme (${pathUri.scheme}) in $pathUri.');
1059 } 1066 }
1060 _sendExtensionImportResponse(sp, uri, libraryUri, null); 1067 _sendExtensionImportResponse(sp, uri, libraryUri, null);
1061 break; 1068 break;
1062 } 1069 }
1063 break; 1070 break;
1064 default: 1071 default:
1065 _log('Unknown loader request tag=$tag from $isolateId'); 1072 _log('Unknown loader request tag=$tag from $isolateId');
1066 } 1073 }
1067 } 1074 }
OLDNEW
« no previous file with comments | « runtime/bin/main.cc ('k') | runtime/bin/vmservice_impl.cc » ('j') | runtime/include/dart_api.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698