| Index: dart/sdk/lib/_internal/compiler/implementation/compiler.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/compiler.dart b/dart/sdk/lib/_internal/compiler/implementation/compiler.dart
|
| index e770cff2319056437c6eff12c693a9ed17a56240..5b8d2444bb5624c764f4eaa5c02c86636180f683 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/compiler.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/compiler.dart
|
| @@ -58,6 +58,11 @@ class WorkItem {
|
| }
|
| }
|
|
|
| +class ReadingFilesTask extends CompilerTask {
|
| + ReadingFilesTask(Compiler compiler) : super(compiler);
|
| + String get name => 'Reading input files';
|
| +}
|
| +
|
| abstract class Backend {
|
| final Compiler compiler;
|
| final ConstantSystem constantSystem;
|
| @@ -100,6 +105,7 @@ abstract class Backend {
|
|
|
| abstract class Compiler implements DiagnosticListener {
|
| final Map<String, LibraryElement> libraries;
|
| + final Stopwatch totalCompileTime = new Stopwatch();
|
| int nextFreeClassId = 0;
|
| World world;
|
| String assembledCode;
|
| @@ -190,6 +196,7 @@ abstract class Compiler implements DiagnosticListener {
|
| Backend backend;
|
| ConstantHandler constantHandler;
|
| EnqueueTask enqueuer;
|
| + CompilerTask fileReadingTask;
|
|
|
| static const SourceString MAIN = const SourceString('main');
|
| static const SourceString CALL_OPERATOR_NAME = const SourceString('call');
|
| @@ -232,26 +239,29 @@ abstract class Compiler implements DiagnosticListener {
|
| progress = new Stopwatch() {
|
| progress.start();
|
| world = new World(this);
|
| - scanner = new ScannerTask(this);
|
| - dietParser = new DietParserTask(this);
|
| - parser = new ParserTask(this);
|
| - patchParser = new PatchParserTask(this);
|
| - libraryLoader = new LibraryLoaderTask(this);
|
| - validator = new TreeValidatorTask(this);
|
| - resolver = new ResolverTask(this);
|
| - closureToClassMapper = new closureMapping.ClosureTask(this);
|
| - checker = new TypeCheckerTask(this);
|
| - typesTask = new ti.TypesTask(this, enableConcreteTypeInference);
|
| backend = emitJavaScript ?
|
| new js_backend.JavaScriptBackend(this,
|
| generateSourceMap,
|
| disallowUnsafeEval) :
|
| new dart_backend.DartBackend(this, strips);
|
| - constantHandler = new ConstantHandler(this, backend.constantSystem);
|
| - enqueuer = new EnqueueTask(this);
|
| - tasks = [scanner, dietParser, parser, patchParser, libraryLoader,
|
| - resolver, closureToClassMapper, checker, typesTask,
|
| - constantHandler, enqueuer];
|
| +
|
| + // No-op in production mode.
|
| + validator = new TreeValidatorTask(this);
|
| +
|
| + tasks = [
|
| + fileReadingTask = new ReadingFilesTask(this),
|
| + libraryLoader = new LibraryLoaderTask(this),
|
| + scanner = new ScannerTask(this),
|
| + dietParser = new DietParserTask(this),
|
| + parser = new ParserTask(this),
|
| + patchParser = new PatchParserTask(this),
|
| + resolver = new ResolverTask(this),
|
| + closureToClassMapper = new closureMapping.ClosureTask(this),
|
| + checker = new TypeCheckerTask(this),
|
| + typesTask = new ti.TypesTask(this, enableConcreteTypeInference),
|
| + constantHandler = new ConstantHandler(this, backend.constantSystem),
|
| + enqueuer = new EnqueueTask(this)];
|
| +
|
| tasks.addAll(backend.tasks);
|
| }
|
|
|
| @@ -340,13 +350,16 @@ abstract class Compiler implements DiagnosticListener {
|
| }
|
|
|
| bool run(Uri uri) {
|
| + totalCompileTime.start();
|
| try {
|
| runCompiler(uri);
|
| } on CompilerCancelledException catch (exception) {
|
| log('Error: $exception');
|
| return false;
|
| + } finally {
|
| + tracer.close();
|
| + totalCompileTime.stop();
|
| }
|
| - tracer.close();
|
| return true;
|
| }
|
|
|
| @@ -863,16 +876,18 @@ class CompilerTask {
|
| int get timing => watch.elapsedMilliseconds;
|
|
|
| measure(Function action) {
|
| - // TODO(kasperl): Do we have to worry about exceptions here?
|
| CompilerTask previous = compiler.measuredTask;
|
| + if (identical(this, previous)) return action();
|
| compiler.measuredTask = this;
|
| if (previous != null) previous.watch.stop();
|
| watch.start();
|
| - var result = action();
|
| - watch.stop();
|
| - if (previous != null) previous.watch.start();
|
| - compiler.measuredTask = previous;
|
| - return result;
|
| + try {
|
| + return action();
|
| + } finally {
|
| + watch.stop();
|
| + if (previous != null) previous.watch.start();
|
| + compiler.measuredTask = previous;
|
| + }
|
| }
|
| }
|
|
|
|
|