Smaller changes to incremental_perf.dart, this is preparation for the flutter IKG perf benchmark

Amonst other things, it allows edits to reference package:<name> uris.

Change-Id: Iff90d5841901b5a003473e7086a266ccdcf94ad3
Reviewed-on: https://dart-review.googlesource.com/21540
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
This commit is contained in:
Martin Kustermann 2017-11-17 10:34:12 +00:00 committed by commit-bot@chromium.org
parent 6a062f496b
commit 1d855b0067
2 changed files with 25 additions and 10 deletions

View file

@ -8,7 +8,7 @@
{ {
"name": "optionslib", "name": "optionslib",
"edits": [ "edits": [
["pkg/compiler/lib/src/options.dart", "_extractStringOption", "_extractStringOptionReplacement"] ["package:compiler/src/options.dart", "_extractStringOption", "_extractStringOptionReplacement"]
] ]
} }
] ]

View file

@ -53,7 +53,9 @@ import 'package:front_end/front_end.dart';
import 'package:front_end/incremental_kernel_generator.dart'; import 'package:front_end/incremental_kernel_generator.dart';
import 'package:front_end/memory_file_system.dart'; import 'package:front_end/memory_file_system.dart';
import 'package:front_end/physical_file_system.dart'; import 'package:front_end/physical_file_system.dart';
import 'package:front_end/src/base/processed_options.dart';
import 'package:front_end/src/byte_store/protected_file_byte_store.dart'; import 'package:front_end/src/byte_store/protected_file_byte_store.dart';
import 'package:front_end/src/fasta/uri_translator.dart';
import 'package:kernel/target/flutter.dart'; import 'package:kernel/target/flutter.dart';
import 'package:kernel/target/targets.dart'; import 'package:kernel/target/targets.dart';
import 'package:kernel/target/vm.dart'; import 'package:kernel/target/vm.dart';
@ -84,7 +86,8 @@ main(List<String> args) async {
if (options['sdk-summary'] != null) { if (options['sdk-summary'] != null) {
compilerOptions.sdkSummary = _resolveOverlayUri(options["sdk-summary"]); compilerOptions.sdkSummary = _resolveOverlayUri(options["sdk-summary"]);
} else if (options['sdk-library-specification'] != null) { }
if (options['sdk-library-specification'] != null) {
compilerOptions.librariesSpecificationUri = compilerOptions.librariesSpecificationUri =
_resolveOverlayUri(options["sdk-library-specification"]); _resolveOverlayUri(options["sdk-library-specification"]);
} }
@ -92,6 +95,10 @@ main(List<String> args) async {
var dir = Directory.systemTemp.createTempSync('ikg-cache'); var dir = Directory.systemTemp.createTempSync('ikg-cache');
compilerOptions.byteStore = createByteStore(options['cache'], dir.path); compilerOptions.byteStore = createByteStore(options['cache'], dir.path);
final processedOptions =
new ProcessedOptions(compilerOptions, false, [entryUri]);
final UriTranslator uriTranslator = await processedOptions.getUriTranslator();
var timer1 = new Stopwatch()..start(); var timer1 = new Stopwatch()..start();
var generator = await IncrementalKernelGenerator.newInstance( var generator = await IncrementalKernelGenerator.newInstance(
compilerOptions, entryUri, compilerOptions, entryUri,
@ -104,7 +111,7 @@ main(List<String> args) async {
print("Initial compilation took: ${timer1.elapsedMilliseconds}ms"); print("Initial compilation took: ${timer1.elapsedMilliseconds}ms");
for (final ChangeSet changeSet in changeSets) { for (final ChangeSet changeSet in changeSets) {
await applyEdits(changeSet.edits, overlayFs, generator); await applyEdits(changeSet.edits, overlayFs, generator, uriTranslator);
var iterTimer = new Stopwatch()..start(); var iterTimer = new Stopwatch()..start();
delta = await generator.computeDelta(); delta = await generator.computeDelta();
generator.acceptLastDelta(); generator.acceptLastDelta();
@ -121,11 +128,13 @@ main(List<String> args) async {
/// Apply all edits of a single iteration by updating the copy of the file in /// Apply all edits of a single iteration by updating the copy of the file in
/// the memory file system. /// the memory file system.
applyEdits(List<Edit> edits, OverlayFileSystem fs, applyEdits(List<Edit> edits, OverlayFileSystem fs,
IncrementalKernelGenerator generator) async { IncrementalKernelGenerator generator, UriTranslator uriTranslator) async {
for (var edit in edits) { for (var edit in edits) {
print('edit $edit'); print('edit $edit');
generator.invalidate(edit.uri); var uri = edit.uri;
OverlayFileSystemEntity entity = fs.entityForUri(edit.uri); if (uri.scheme == 'package') uri = uriTranslator.translate(uri);
generator.invalidate(uri);
OverlayFileSystemEntity entity = fs.entityForUri(uri);
var contents = await entity.readAsString(); var contents = await entity.readAsString();
entity.writeAsStringSync( entity.writeAsStringSync(
contents.replaceAll(edit.original, edit.replacement)); contents.replaceAll(edit.original, edit.replacement));
@ -166,12 +175,18 @@ class OverlayFileSystem implements FileSystem {
@override @override
FileSystemEntity entityForUri(Uri uri) { FileSystemEntity entityForUri(Uri uri) {
if (uri.scheme != 'org-dartlang-overlay') { if (uri.scheme == 'org-dartlang-overlay') {
return new OverlayFileSystemEntity(uri, this);
} else if (uri.scheme == 'file') {
// The IKG compiler reads ".packages" which might contain absolute file
// URIs (which it will then try to use on the FS). We therefore replace
// them with overlay-fs URIs as usual.
return new OverlayFileSystemEntity(_resolveOverlayUri('$uri'), this);
} else {
throw "Unsupported scheme: ${uri.scheme}." throw "Unsupported scheme: ${uri.scheme}."
" The OverlayFileSystem only accepts URIs" " The OverlayFileSystem only accepts URIs"
" with the 'org-dartlang-overlay' scheme"; " with the 'org-dartlang-overlay' scheme";
} }
return new OverlayFileSystemEntity(uri, this);
} }
} }
@ -233,7 +248,7 @@ class Edit {
final String replacement; final String replacement;
Edit(String uriString, this.original, this.replacement) Edit(String uriString, this.original, this.replacement)
: uri = _resolveOverlayUri(uriString); : uri = Uri.base.resolve(uriString);
String toString() => 'Edit($uri, "$original" -> "$replacement")'; String toString() => 'Edit($uri, "$original" -> "$replacement")';
} }
@ -248,7 +263,7 @@ class ChangeSet {
String toString() => 'ChangeSet($name, $edits)'; String toString() => 'ChangeSet($name, $edits)';
} }
_resolveOverlayUri(uriString) => _resolveOverlayUri(String uriString) =>
Uri.base.resolve(uriString).replace(scheme: 'org-dartlang-overlay'); Uri.base.resolve(uriString).replace(scheme: 'org-dartlang-overlay');
ArgParser argParser = new ArgParser() ArgParser argParser = new ArgParser()