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

Side by Side Diff: pkg/compiler/lib/src/library_loader.dart

Issue 2000323006: Make CompilerTask independent of compiler. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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) 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 dart2js.library_loader; 5 library dart2js.library_loader;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'common/names.dart' show Uris; 9 import 'common/names.dart' show Uris;
10 import 'common/tasks.dart' show CompilerTask; 10 import 'common/tasks.dart' show CompilerTask, GenericTask;
11 import 'common.dart'; 11 import 'common.dart';
12 import 'compiler.dart' show Compiler; 12 import 'compiler.dart' show Compiler;
13 import 'elements/elements.dart' 13 import 'elements/elements.dart'
14 show 14 show
15 CompilationUnitElement, 15 CompilationUnitElement,
16 Element, 16 Element,
17 ImportElement, 17 ImportElement,
18 ExportElement, 18 ExportElement,
19 LibraryElement; 19 LibraryElement;
20 import 'elements/modelx.dart' 20 import 'elements/modelx.dart'
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 final LibraryDeserializer deserializer; 290 final LibraryDeserializer deserializer;
291 291
292 /// Hooks to inform others about progress done by this loader. 292 /// Hooks to inform others about progress done by this loader.
293 // TODO(sigmund): move away from this. 293 // TODO(sigmund): move away from this.
294 final LibraryLoaderListener listener; 294 final LibraryLoaderListener listener;
295 295
296 /// Definitions provided via the `-D` command line flags. Used to resolve 296 /// Definitions provided via the `-D` command line flags. Used to resolve
297 /// conditional imports. 297 /// conditional imports.
298 final Environment environment; 298 final Environment environment;
299 299
300 final Compiler compiler;
301 DiagnosticReporter get reporter => compiler.reporter;
302
300 _LibraryLoaderTask(Compiler compiler, this.uriTranslator, this.scriptLoader, 303 _LibraryLoaderTask(Compiler compiler, this.uriTranslator, this.scriptLoader,
301 this.scanner, this.deserializer, this.listener, this.environment) 304 this.scanner, this.deserializer, this.listener, this.environment)
302 // TODO(sigmund): make measurements separate from compiler 305 : compiler = compiler,
303 : super(compiler); 306 super(compiler.measurer);
304 307
305 String get name => 'LibraryLoader'; 308 String get name => 'LibraryLoader';
306 309
307 final Map<Uri, LibraryElement> libraryCanonicalUriMap = 310 final Map<Uri, LibraryElement> libraryCanonicalUriMap =
308 new Map<Uri, LibraryElement>(); 311 new Map<Uri, LibraryElement>();
309 final Map<Uri, LibraryElement> libraryResourceUriMap = 312 final Map<Uri, LibraryElement> libraryResourceUriMap =
310 new Map<Uri, LibraryElement>(); 313 new Map<Uri, LibraryElement>();
311 final Map<String, LibraryElement> libraryNames = 314 final Map<String, LibraryElement> libraryNames =
312 new Map<String, LibraryElement>(); 315 new Map<String, LibraryElement>();
313 316
314 LibraryDependencyHandler currentHandler; 317 LibraryDependencyHandler currentHandler;
315 318
316 Iterable<LibraryElement> get libraries => libraryCanonicalUriMap.values; 319 Iterable<LibraryElement> get libraries => libraryCanonicalUriMap.values;
317 320
318 LibraryElement lookupLibrary(Uri canonicalUri) { 321 LibraryElement lookupLibrary(Uri canonicalUri) {
319 return libraryCanonicalUriMap[canonicalUri]; 322 return libraryCanonicalUriMap[canonicalUri];
320 } 323 }
321 324
322 void reset({bool reuseLibrary(LibraryElement library)}) { 325 void reset({bool reuseLibrary(LibraryElement library)}) {
323 measure(() { 326 measure(() {
324 assert(currentHandler == null); 327 assert(currentHandler == null);
325 328
326 Iterable<LibraryElement> reusedLibraries = null; 329 Iterable<LibraryElement> reusedLibraries = null;
327 if (reuseLibrary != null) { 330 if (reuseLibrary != null) {
328 // TODO(sigmund): make measurements separate from compiler 331 reusedLibraries = measureSubtask(_reuseLibrarySubtaskName, () {
329 reusedLibraries = compiler.reuseLibraryTask.measure(() {
330 // Call [toList] to force eager calls to [reuseLibrary]. 332 // Call [toList] to force eager calls to [reuseLibrary].
331 return libraryCanonicalUriMap.values.where(reuseLibrary).toList(); 333 return libraryCanonicalUriMap.values.where(reuseLibrary).toList();
332 }); 334 });
333 } 335 }
334 336
335 resetImplementation(reusedLibraries); 337 resetImplementation(reusedLibraries);
336 }); 338 });
337 } 339 }
338 340
339 void resetImplementation(Iterable<LibraryElement> reusedLibraries) { 341 void resetImplementation(Iterable<LibraryElement> reusedLibraries) {
(...skipping 17 matching lines...) Expand all
357 return reuseLibrary(library) 359 return reuseLibrary(library)
358 .then((bool reuse) => reuse ? library : null); 360 .then((bool reuse) => reuse ? library : null);
359 } catch (exception, trace) { 361 } catch (exception, trace) {
360 reporter.onCrashInUserCode( 362 reporter.onCrashInUserCode(
361 'Uncaught exception in reuseLibrary', exception, trace); 363 'Uncaught exception in reuseLibrary', exception, trace);
362 rethrow; 364 rethrow;
363 } 365 }
364 } 366 }
365 367
366 List<Future<LibraryElement>> reusedLibrariesFuture = 368 List<Future<LibraryElement>> reusedLibrariesFuture =
367 // TODO(sigmund): make measurements separate from compiler 369 measureSubtask(_reuseLibrarySubtaskName,
368 compiler.reuseLibraryTask.measure(
369 () => libraryCanonicalUriMap.values.map(wrapper).toList()); 370 () => libraryCanonicalUriMap.values.map(wrapper).toList());
370 371
371 return Future 372 return Future
372 .wait(reusedLibrariesFuture) 373 .wait(reusedLibrariesFuture)
373 .then((Iterable<LibraryElement> reusedLibraries) { 374 .then((Iterable<LibraryElement> reusedLibraries) {
374 resetImplementation(reusedLibraries.where((e) => e != null)); 375 resetImplementation(reusedLibraries.where((e) => e != null));
375 }); 376 });
376 }); 377 });
377 } 378 }
378 379
379 Future<Null> resetLibraries( 380 Future<Null> resetLibraries(
380 Future<Iterable<LibraryElement>> reuseLibraries( 381 Future<Iterable<LibraryElement>> reuseLibraries(
381 Iterable<LibraryElement> libraries)) { 382 Iterable<LibraryElement> libraries)) {
382 assert(currentHandler == null); 383 assert(currentHandler == null);
383 return compiler.reuseLibraryTask.measure(() { 384 return measureSubtask(_reuseLibrarySubtaskName, () {
384 return new Future<Iterable<LibraryElement>>(() { 385 return new Future<Iterable<LibraryElement>>(() {
385 // Wrap in Future to shield against errors in user code. 386 // Wrap in Future to shield against errors in user code.
386 return reuseLibraries(libraryCanonicalUriMap.values); 387 return reuseLibraries(libraryCanonicalUriMap.values);
387 }).catchError((exception, StackTrace trace) { 388 }).catchError((exception, StackTrace trace) {
388 compiler.reportCrashInUserCode( 389 compiler.reportCrashInUserCode(
389 'Uncaught exception in reuseLibraries', exception, trace); 390 'Uncaught exception in reuseLibraries', exception, trace);
390 throw exception; // Async rethrow. 391 throw exception; // Async rethrow.
391 }).then((Iterable<LibraryElement> reusedLibraries) { 392 }).then((Iterable<LibraryElement> reusedLibraries) {
392 measure(() { 393 measure(() {
393 resetImplementation(reusedLibraries); 394 resetImplementation(reusedLibraries);
(...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 /// Called after a request to load a library. The [results] will include all 1502 /// Called after a request to load a library. The [results] will include all
1502 /// transitive libraries loaded as a result of the initial request. 1503 /// transitive libraries loaded as a result of the initial request.
1503 Future onLibrariesLoaded(LoadedLibraries results); 1504 Future onLibrariesLoaded(LoadedLibraries results);
1504 1505
1505 /// Called whenever a library element is created. 1506 /// Called whenever a library element is created.
1506 void onLibraryCreated(LibraryElement library); 1507 void onLibraryCreated(LibraryElement library);
1507 1508
1508 /// Called whenever a library is scanned from a script file. 1509 /// Called whenever a library is scanned from a script file.
1509 Future onLibraryScanned(LibraryElement library, LibraryLoader loader); 1510 Future onLibraryScanned(LibraryElement library, LibraryLoader loader);
1510 } 1511 }
1512
1513 const _reuseLibrarySubtaskName = "Reuse library";
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698