| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 trydart.poi; | 5 library trydart.poi; |
| 6 | 6 |
| 7 import 'dart:async' show | 7 import 'dart:async' show |
| 8 Completer, | 8 Completer, |
| 9 Future; | 9 Future; |
| 10 | 10 |
| 11 import 'dart:io' as io; | 11 import 'dart:io' as io; |
| 12 | 12 |
| 13 import 'dart:convert' show | 13 import 'dart:convert' show |
| 14 UTF8; | 14 UTF8; |
| 15 | 15 |
| 16 import 'package:dart2js_incremental/dart2js_incremental.dart' show | 16 import 'package:dart2js_incremental/dart2js_incremental.dart' show |
| 17 INCREMENTAL_OPTIONS, | 17 INCREMENTAL_OPTIONS, |
| 18 reuseCompiler; | 18 reuseCompiler; |
| 19 | 19 |
| 20 import 'package:dart2js_incremental/library_updater.dart' show | 20 import 'package:dart2js_incremental/library_updater.dart' show |
| 21 IncrementalCompilerContext, |
| 21 LibraryUpdater; | 22 LibraryUpdater; |
| 22 | 23 |
| 23 import 'package:compiler/src/source_file_provider.dart' show | 24 import 'package:compiler/src/source_file_provider.dart' show |
| 24 FormattingDiagnosticHandler; | 25 FormattingDiagnosticHandler; |
| 25 | 26 |
| 26 import 'package:compiler/compiler.dart' as api; | 27 import 'package:compiler/compiler.dart' as api; |
| 27 | 28 |
| 28 import 'package:compiler/src/dart2jslib.dart' show | 29 import 'package:compiler/src/dart2jslib.dart' show |
| 29 Compiler, | 30 Compiler, |
| 30 CompilerTask, | 31 CompilerTask, |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 options.add('--minify'); | 400 options.add('--minify'); |
| 400 } | 401 } |
| 401 | 402 |
| 402 LibraryUpdater updater; | 403 LibraryUpdater updater; |
| 403 | 404 |
| 404 Future<bool> reuseLibrary(LibraryElement library) { | 405 Future<bool> reuseLibrary(LibraryElement library) { |
| 405 return poiTask.measure(() => updater.reuseLibrary(library)); | 406 return poiTask.measure(() => updater.reuseLibrary(library)); |
| 406 } | 407 } |
| 407 | 408 |
| 408 Future<Compiler> invokeReuseCompiler() { | 409 Future<Compiler> invokeReuseCompiler() { |
| 410 var context = new IncrementalCompilerContext(); |
| 409 updater = new LibraryUpdater( | 411 updater = new LibraryUpdater( |
| 410 cachedCompiler, inputProvider, script, printWallClock, printVerbose); | 412 cachedCompiler, inputProvider, printWallClock, printVerbose, context); |
| 413 context.registerUriWithUpdates([script]); |
| 411 return reuseCompiler( | 414 return reuseCompiler( |
| 412 diagnosticHandler: handler, | 415 diagnosticHandler: handler, |
| 413 inputProvider: inputProvider, | 416 inputProvider: inputProvider, |
| 414 options: options, | 417 options: options, |
| 415 cachedCompiler: cachedCompiler, | 418 cachedCompiler: cachedCompiler, |
| 416 libraryRoot: libraryRoot, | 419 libraryRoot: libraryRoot, |
| 417 packageRoot: packageRoot, | 420 packageRoot: packageRoot, |
| 418 packagesAreImmutable: true, | 421 packagesAreImmutable: true, |
| 419 reuseLibrary: reuseLibrary); | 422 reuseLibrary: reuseLibrary); |
| 420 } | 423 } |
| 421 | 424 |
| 422 return invokeReuseCompiler().then((Compiler newCompiler) { | 425 return invokeReuseCompiler().then((Compiler newCompiler) { |
| 423 // TODO(ahe): Move this "then" block to [reuseCompiler]. | 426 // TODO(ahe): Move this "then" block to [reuseCompiler]. |
| 424 if (updater.failed) { | 427 if (updater.failed) { |
| 425 cachedCompiler = null; | 428 cachedCompiler = null; |
| 426 return invokeReuseCompiler(); | 429 return invokeReuseCompiler(); |
| 427 } else { | 430 } else { |
| 428 return newCompiler; | 431 return newCompiler; |
| 429 } | 432 } |
| 430 }).then((Compiler newCompiler) { | 433 }).then((Compiler newCompiler) { |
| 431 if (!isCompiler) { | 434 if (!isCompiler) { |
| 432 newCompiler.enqueuerFilter = new ScriptOnlyFilter(script); | 435 newCompiler.enqueuerFilter = new ScriptOnlyFilter(script); |
| 433 } | 436 } |
| 434 return runPoiInternal(newCompiler, sw, updater, position); | 437 return runPoiInternal(newCompiler, sw, updater, script, position); |
| 435 }); | 438 }); |
| 436 } | 439 } |
| 437 | 440 |
| 438 Future<Element> runPoiInternal( | 441 Future<Element> runPoiInternal( |
| 439 Compiler newCompiler, | 442 Compiler newCompiler, |
| 440 Stopwatch sw, | 443 Stopwatch sw, |
| 441 LibraryUpdater updater, | 444 LibraryUpdater updater, |
| 445 Uri uri, |
| 442 int position) { | 446 int position) { |
| 443 bool isFullCompile = cachedCompiler != newCompiler; | 447 bool isFullCompile = cachedCompiler != newCompiler; |
| 444 cachedCompiler = newCompiler; | 448 cachedCompiler = newCompiler; |
| 445 if (poiTask == null || poiTask.compiler != cachedCompiler) { | 449 if (poiTask == null || poiTask.compiler != cachedCompiler) { |
| 446 poiTask = new PoiTask(cachedCompiler); | 450 poiTask = new PoiTask(cachedCompiler); |
| 447 cachedCompiler.tasks.add(poiTask); | 451 cachedCompiler.tasks.add(poiTask); |
| 448 } | 452 } |
| 449 | 453 |
| 450 if (!isFullCompile) { | 454 if (!isFullCompile) { |
| 451 printFormattedTime( | 455 printFormattedTime( |
| 452 'Analyzing changes and updating elements took', sw.elapsedMicroseconds); | 456 'Analyzing changes and updating elements took', sw.elapsedMicroseconds); |
| 453 } | 457 } |
| 454 sw.reset(); | 458 sw.reset(); |
| 455 | 459 |
| 456 Future<bool> compilation; | 460 Future<bool> compilation; |
| 457 | 461 |
| 458 if (updater.hasPendingUpdates) { | 462 if (updater.hasPendingUpdates) { |
| 459 compilation = new Future(() { | 463 compilation = new Future(() { |
| 460 var node = js.statement( | 464 var node = js.statement( |
| 461 r'var $dart_patch = #', js.escapedString(updater.computeUpdateJs())); | 465 r'var $dart_patch = #', js.escapedString(updater.computeUpdateJs())); |
| 462 print(updater.prettyPrintJs(node)); | 466 print(updater.prettyPrintJs(node)); |
| 463 | 467 |
| 464 return !cachedCompiler.compilationFailed; | 468 return !cachedCompiler.compilationFailed; |
| 465 }); | 469 }); |
| 466 } else { | 470 } else { |
| 467 compilation = cachedCompiler.run(updater.uri); | 471 compilation = cachedCompiler.run(uri); |
| 468 } | 472 } |
| 469 | 473 |
| 470 return compilation.then((success) { | 474 return compilation.then((success) { |
| 471 printVerbose('Compiler queue processed in ${sw.elapsedMicroseconds}us'); | 475 printVerbose('Compiler queue processed in ${sw.elapsedMicroseconds}us'); |
| 472 if (isVerbose) { | 476 if (isVerbose) { |
| 473 for (final task in cachedCompiler.tasks) { | 477 for (final task in cachedCompiler.tasks) { |
| 474 int time = task.timingMicroseconds; | 478 int time = task.timingMicroseconds; |
| 475 if (time != 0) { | 479 if (time != 0) { |
| 476 printFormattedTime('${task.name} took', time); | 480 printFormattedTime('${task.name} took', time); |
| 477 } | 481 } |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 f(work); | 553 f(work); |
| 550 printWallClock('Processed ${work.element}.'); | 554 printWallClock('Processed ${work.element}.'); |
| 551 } | 555 } |
| 552 } | 556 } |
| 553 | 557 |
| 554 class PoiTask extends CompilerTask { | 558 class PoiTask extends CompilerTask { |
| 555 PoiTask(Compiler compiler) : super(compiler); | 559 PoiTask(Compiler compiler) : super(compiler); |
| 556 | 560 |
| 557 String get name => 'POI'; | 561 String get name => 'POI'; |
| 558 } | 562 } |
| OLD | NEW |