| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 builtin; | 5 library builtin; |
| 6 // NOTE: Do not import 'dart:io' in builtin. | 6 // NOTE: Do not import 'dart:io' in builtin. |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:_internal'; | 9 import 'dart:_internal'; |
| 10 import 'dart:isolate'; | 10 import 'dart:isolate'; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 const _Dart_kScriptTag = null; | 60 const _Dart_kScriptTag = null; |
| 61 const _Dart_kImportTag = 0; | 61 const _Dart_kImportTag = 0; |
| 62 const _Dart_kSourceTag = 1; | 62 const _Dart_kSourceTag = 1; |
| 63 const _Dart_kCanonicalizeUrl = 2; | 63 const _Dart_kCanonicalizeUrl = 2; |
| 64 const _Dart_kResourceLoad = 3; | 64 const _Dart_kResourceLoad = 3; |
| 65 | 65 |
| 66 // Embedder sets this to true if the --trace-loading flag was passed on the | 66 // Embedder sets this to true if the --trace-loading flag was passed on the |
| 67 // command line. | 67 // command line. |
| 68 bool _traceLoading = false; | 68 bool _traceLoading = false; |
| 69 | 69 |
| 70 // This is currently a build time flag only. We measure the time from the first |
| 71 // load request (opening the receive port) to completing the last load |
| 72 // request (closing the receive port). Future, deferred load operations will |
| 73 // add to this time. |
| 74 bool _timeLoading = false; |
| 75 Stopwatch _stopwatch; |
| 76 |
| 70 // A port for communicating with the service isolate for I/O. | 77 // A port for communicating with the service isolate for I/O. |
| 71 SendPort _loadPort; | 78 SendPort _loadPort; |
| 72 // The receive port for a load request. Multiple sources can be fetched in | 79 // The receive port for a load request. Multiple sources can be fetched in |
| 73 // a single load request. | 80 // a single load request. |
| 74 RawReceivePort _dataPort; | 81 RawReceivePort _dataPort; |
| 75 // A request id valid only for the current load cycle (while the number of | 82 // A request id valid only for the current load cycle (while the number of |
| 76 // outstanding load requests is greater than 0). Can be reset when loading is | 83 // outstanding load requests is greater than 0). Can be reset when loading is |
| 77 // completed. | 84 // completed. |
| 78 int _reqId = 0; | 85 int _reqId = 0; |
| 79 // An unordered hash map mapping from request id to a particular load request. | 86 // An unordered hash map mapping from request id to a particular load request. |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 var tmp = _reqMap.remove(req._id); | 358 var tmp = _reqMap.remove(req._id); |
| 352 assert(tmp == req); | 359 assert(tmp == req); |
| 353 if (_traceLoading) { | 360 if (_traceLoading) { |
| 354 _log("Loading of ${req._uri} finished: " | 361 _log("Loading of ${req._uri} finished: " |
| 355 "${_reqMap.length} requests remaining, " | 362 "${_reqMap.length} requests remaining, " |
| 356 "${_pendingPackageLoads.length} packages pending."); | 363 "${_pendingPackageLoads.length} packages pending."); |
| 357 } | 364 } |
| 358 } | 365 } |
| 359 | 366 |
| 360 if (!_pendingLoads() && (_dataPort != null)) { | 367 if (!_pendingLoads() && (_dataPort != null)) { |
| 368 _stopwatch.stop(); |
| 361 // Close the _dataPort now that there are no more requests outstanding. | 369 // Close the _dataPort now that there are no more requests outstanding. |
| 362 if (_traceLoading) { | 370 if (_traceLoading || _timeLoading) { |
| 363 _log("Closing loading port."); | 371 _log("Closing loading port: ${_stopwatch.elapsedMilliseconds} ms"); |
| 364 } | 372 } |
| 365 _dataPort.close(); | 373 _dataPort.close(); |
| 366 _dataPort = null; | 374 _dataPort = null; |
| 367 _reqId = 0; | 375 _reqId = 0; |
| 368 _signalDoneLoading(); | 376 _signalDoneLoading(); |
| 369 } | 377 } |
| 370 } | 378 } |
| 371 | 379 |
| 372 | 380 |
| 373 void _handleLoaderReply(msg) { | 381 void _handleLoaderReply(msg) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 401 _asyncLoadError(req, error, s); | 409 _asyncLoadError(req, error, s); |
| 402 } | 410 } |
| 403 } | 411 } |
| 404 | 412 |
| 405 | 413 |
| 406 void _startLoadRequest(int tag, String uri, Uri resourceUri, context) { | 414 void _startLoadRequest(int tag, String uri, Uri resourceUri, context) { |
| 407 if (_dataPort == null) { | 415 if (_dataPort == null) { |
| 408 if (_traceLoading) { | 416 if (_traceLoading) { |
| 409 _log("Initializing load port."); | 417 _log("Initializing load port."); |
| 410 } | 418 } |
| 419 // Allocate the Stopwatch if necessary. |
| 420 if (_stopwatch == null) { |
| 421 _stopwatch = new Stopwatch(); |
| 422 } |
| 411 assert(_dataPort == null); | 423 assert(_dataPort == null); |
| 412 _dataPort = new RawReceivePort(_handleLoaderReply); | 424 _dataPort = new RawReceivePort(_handleLoaderReply); |
| 425 _stopwatch.start(); |
| 413 } | 426 } |
| 414 // Register the load request and send it to the VM service isolate. | 427 // Register the load request and send it to the VM service isolate. |
| 415 var req = new _LoadRequest(tag, uri, resourceUri, context); | 428 var req = new _LoadRequest(tag, uri, resourceUri, context); |
| 416 | 429 |
| 417 assert(_dataPort != null); | 430 assert(_dataPort != null); |
| 418 var msg = new List(4); | 431 var msg = new List(4); |
| 419 msg[0] = _dataPort.sendPort; | 432 msg[0] = _dataPort.sendPort; |
| 420 msg[1] = _traceLoading; | 433 msg[1] = _traceLoading; |
| 421 msg[2] = req._id; | 434 msg[2] = req._id; |
| 422 msg[3] = resourceUri.toString(); | 435 msg[3] = resourceUri.toString(); |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 892 | 905 |
| 893 // Register callbacks and hooks with the rest of the core libraries. | 906 // Register callbacks and hooks with the rest of the core libraries. |
| 894 _setupHooks() { | 907 _setupHooks() { |
| 895 _setupCompleted = true; | 908 _setupCompleted = true; |
| 896 VMLibraryHooks.resourceReadAsBytes = _resourceReadAsBytes; | 909 VMLibraryHooks.resourceReadAsBytes = _resourceReadAsBytes; |
| 897 | 910 |
| 898 VMLibraryHooks.packageRootUriFuture = _getPackageRootFuture; | 911 VMLibraryHooks.packageRootUriFuture = _getPackageRootFuture; |
| 899 VMLibraryHooks.packageConfigUriFuture = _getPackageConfigFuture; | 912 VMLibraryHooks.packageConfigUriFuture = _getPackageConfigFuture; |
| 900 VMLibraryHooks.resolvePackageUriFuture = _resolvePackageUriFuture; | 913 VMLibraryHooks.resolvePackageUriFuture = _resolvePackageUriFuture; |
| 901 } | 914 } |
| OLD | NEW |