Fix benchmark regression from #83427 (#83437)

This commit is contained in:
Lau Ching Jun 2021-05-26 17:59:02 -07:00 committed by GitHub
parent 1bdf65c697
commit 27a6796233
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 4 deletions

View file

@ -1241,9 +1241,11 @@ class ProjectFileInvalidator {
final List<Future<void>> waitList = <Future<void>>[];
for (final Uri uri in urisToScan) {
waitList.add(pool.withResource<void>(
() => _fileSystem
.file(uri)
.stat()
// Calling fs.stat() is more performant than fs.file().stat(), but
// uri.toFilePath() does not work with MultiRootFileSystem.
() => (uri.hasScheme && uri.scheme != 'file'
? _fileSystem.file(uri).stat()
: _fileSystem.stat(uri.toFilePath(windows: _platform.isWindows)))
.then((FileStat stat) {
final DateTime updatedAt = stat.modified;
if (updatedAt != null && updatedAt.isAfter(lastCompiled)) {
@ -1255,7 +1257,11 @@ class ProjectFileInvalidator {
await Future.wait<void>(waitList);
} else {
for (final Uri uri in urisToScan) {
final DateTime updatedAt = _fileSystem.file(uri).statSync().modified;
// Calling fs.statSync() is more performant than fs.file().statSync(), but
// uri.toFilePath() does not work with MultiRootFileSystem.
final DateTime updatedAt = uri.hasScheme && uri.scheme != 'file'
? _fileSystem.file(uri).statSync().modified
: _fileSystem.statSync(uri.toFilePath(windows: _platform.isWindows)).modified;
if (updatedAt != null && updatedAt.isAfter(lastCompiled)) {
invalidatedFiles.add(uri);
}

View file

@ -7,6 +7,7 @@
import 'package:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/multi_root_file_system.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/convert.dart';
import 'package:flutter_tools/src/run_hot.dart';
@ -164,5 +165,36 @@ void main() {
expect(nextInvalidationResult.packageConfig,
isNot(invalidationResult.packageConfig));
});
testWithoutContext('Works with MultiRootFileSystem uris, asyncScanning: $asyncScanning', () async {
final FileSystem fileSystem = MemoryFileSystem.test();
final FileSystem multiRootFileSystem = MultiRootFileSystem(
delegate: fileSystem,
scheme: 'scheme',
roots: <String>[
'/root',
],
);
final ProjectFileInvalidator projectFileInvalidator = ProjectFileInvalidator(
fileSystem: multiRootFileSystem,
platform: FakePlatform(),
logger: BufferLogger.test(),
);
expect(
(await projectFileInvalidator.findInvalidated(
lastCompiled: inFuture,
urisToMonitor: <Uri>[
Uri.parse('file1'),
Uri.parse('file:///file2'),
Uri.parse('scheme:///file3'),
],
packagesPath: '.packages',
asyncScanning: asyncScanning,
packageConfig: PackageConfig.empty,
)).uris,
isEmpty,
);
});
}
}