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

Side by Side Diff: sdk/lib/_internal/compiler/js_lib/js_helper.dart

Issue 837903002: Fix deferred loading with multiple apps on same page. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressing comments Created 5 years, 11 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 _js_helper; 5 library _js_helper;
6 6
7 import 'dart:_js_embedded_names' show 7 import 'dart:_js_embedded_names' show
8 ALL_CLASSES, 8 ALL_CLASSES,
9 GET_ISOLATE_TAG, 9 GET_ISOLATE_TAG,
10 INTERCEPTED_NAMES, 10 INTERCEPTED_NAMES,
11 INTERCEPTORS_BY_TAG, 11 INTERCEPTORS_BY_TAG,
12 LEAF_TAGS, 12 LEAF_TAGS,
13 METADATA, 13 METADATA,
14 DEFERRED_LIBRARY_URIS, 14 DEFERRED_LIBRARY_URIS,
15 DEFERRED_LIBRARY_HASHES, 15 DEFERRED_LIBRARY_HASHES,
16 INITIALIZE_LOADED_HUNK, 16 INITIALIZE_LOADED_HUNK,
17 IS_HUNK_LOADED, 17 IS_HUNK_LOADED,
18 IS_HUNK_INITIALIZED,
18 NATIVE_SUPERCLASS_TAG_NAME; 19 NATIVE_SUPERCLASS_TAG_NAME;
19 20
20 import 'dart:collection'; 21 import 'dart:collection';
21 import 'dart:_isolate_helper' show 22 import 'dart:_isolate_helper' show
22 IsolateNatives, 23 IsolateNatives,
23 leaveJsAsync, 24 leaveJsAsync,
24 enterJsAsync, 25 enterJsAsync,
25 isWorker; 26 isWorker;
26 27
27 import 'dart:async' show Future, DeferredLoadException, Completer; 28 import 'dart:async' show Future, DeferredLoadException, Completer;
(...skipping 3278 matching lines...) Expand 10 before | Expand all | Expand 10 after
3306 // For each loadId there is a list of hunk-uris to load, and a corresponding 3307 // For each loadId there is a list of hunk-uris to load, and a corresponding
3307 // list of hashes. These are stored in the app-global scope. 3308 // list of hashes. These are stored in the app-global scope.
3308 var urisMap = JS_EMBEDDED_GLOBAL('', DEFERRED_LIBRARY_URIS); 3309 var urisMap = JS_EMBEDDED_GLOBAL('', DEFERRED_LIBRARY_URIS);
3309 List<String> uris = JS('JSExtendableArray|Null', '#[#]', urisMap, loadId); 3310 List<String> uris = JS('JSExtendableArray|Null', '#[#]', urisMap, loadId);
3310 var hashesMap = JS_EMBEDDED_GLOBAL('', DEFERRED_LIBRARY_HASHES); 3311 var hashesMap = JS_EMBEDDED_GLOBAL('', DEFERRED_LIBRARY_HASHES);
3311 List<String> hashes = JS('JSExtendableArray|Null', '#[#]', hashesMap, loadId); 3312 List<String> hashes = JS('JSExtendableArray|Null', '#[#]', hashesMap, loadId);
3312 if (uris == null) return new Future.value(null); 3313 if (uris == null) return new Future.value(null);
3313 // The indices into `uris` and `hashes` that we want to load. 3314 // The indices into `uris` and `hashes` that we want to load.
3314 List<int> indices = new List.generate(uris.length, (i) => i); 3315 List<int> indices = new List.generate(uris.length, (i) => i);
3315 var isHunkLoaded = JS_EMBEDDED_GLOBAL('', IS_HUNK_LOADED); 3316 var isHunkLoaded = JS_EMBEDDED_GLOBAL('', IS_HUNK_LOADED);
3317 var isHunkInitialized = JS_EMBEDDED_GLOBAL('', IS_HUNK_INITIALIZED);
3316 // Filter away indices for hunks that have already been loaded. 3318 // Filter away indices for hunks that have already been loaded.
3317 List<int> indicesToLoad = indices 3319 List<int> indicesToLoad = indices
3318 .where((int i) => !JS('bool','#(#)', isHunkLoaded, hashes[i])) 3320 .where((int i) => !JS('bool','#(#)', isHunkLoaded, hashes[i]))
3319 .toList(); 3321 .toList();
3320 // Load the needed hunks. 3322 List<int> indicesToInitialize = indices
3323 .where((int i) => !JS('bool','#(#)', isHunkInitialized, hashes[i]))
3324 .toList(); // Load the needed hunks.
3321 return Future.wait(indicesToLoad 3325 return Future.wait(indicesToLoad
3322 .map((int i) => _loadHunk(uris[i]))).then((_) { 3326 .map((int i) => _loadHunk(uris[i]))).then((_) {
3323 // Now all hunks have been loaded, we run the needed initializers. 3327 // Now all hunks have been loaded, we run the needed initializers.
3324 for (int i in indicesToLoad) { 3328 for (int i in indicesToInitialize) {
3325 var initializer = JS_EMBEDDED_GLOBAL('', INITIALIZE_LOADED_HUNK); 3329 var initializer = JS_EMBEDDED_GLOBAL('', INITIALIZE_LOADED_HUNK);
3326 JS('void', '#(#)', initializer, hashes[i]); 3330 JS('void', '#(#)', initializer, hashes[i]);
3327 } 3331 }
3328 bool updated = _loadedLibraries.add(loadId); 3332 bool updated = _loadedLibraries.add(loadId);
3329 if (updated && deferredLoadHook != null) { 3333 if (updated && deferredLoadHook != null) {
3330 deferredLoadHook(); 3334 deferredLoadHook();
3331 } 3335 }
3332 }); 3336 });
3333 } 3337 }
3334 3338
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
3436 throw new MainError("No top-level function named 'main'."); 3440 throw new MainError("No top-level function named 'main'.");
3437 } 3441 }
3438 3442
3439 void badMain() { 3443 void badMain() {
3440 throw new MainError("'main' is not a function."); 3444 throw new MainError("'main' is not a function.");
3441 } 3445 }
3442 3446
3443 void mainHasTooManyParameters() { 3447 void mainHasTooManyParameters() {
3444 throw new MainError("'main' expects too many parameters."); 3448 throw new MainError("'main' expects too many parameters.");
3445 } 3449 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart ('k') | sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698