blob: a3de4ab8175bcd083da3744497a0406604e890e1 [file] [log] [blame]
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/file_system/overlay_file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
void main() async {
var resourceProvider = OverlayResourceProvider(
PhysicalResourceProvider.INSTANCE,
);
var path = '/Users/scheglov/dart/test/lib/a.dart';
var buffer = StringBuffer();
const classCount = 100 * 1000;
for (var i = 0; i < classCount; i++) {
buffer.writeln('class A$i {}');
}
resourceProvider.setOverlay(
path,
content: buffer.toString(),
modificationStamp: 0,
);
var collection = AnalysisContextCollectionImpl(
resourceProvider: resourceProvider,
includedPaths: [path],
);
var analysisContext = collection.contextFor(path);
var unitResult = analysisContext.currentSession.getParsedUnit(path);
unitResult as ParsedUnitResult;
var classList = unitResult.unit.declarations
.whereType<ClassDeclaration>()
.toList(growable: false);
var randomClassList = classList.toList();
randomClassList.shuffle();
for (var i = 0; i < 10; i++) {
_iterateClassList(i, 'sequential', classList);
_iterateClassList(i, ' random', randomClassList);
}
}
void _iterateClassList(int i, String name, List<ClassDeclaration> classList) {
var timer = Stopwatch()..start();
var result = 0;
for (var i = 0; i < 100; i++) {
for (var i = 0; i < classList.length; i++) {
var classDeclaration = classList[i];
result = (result + classDeclaration.offset) & 0xFFFF;
result = (result + classDeclaration.length) & 0xFFFF;
result = (result + classDeclaration.name.length) & 0xFFFF;
}
}
timer.stop();
print(
'[$i][$name][result: $result]'
'[time: ${timer.elapsedMilliseconds} ms]',
);
}