blob: 0a21f3f4117ee8e8a0767f54d91c34400ce644b0 [file] [log] [blame]
// import 'dart:io' hide BytesBuilder;
// import 'dart:typed_data';
//
// import 'package:analyzer/file_system/physical_file_system.dart';
// import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
// import 'package:vm_service/vm_service.dart';
// import 'package:analyzer/src/dart/analysis/byte_store.dart';
// import 'package:analyzer/src/dart/analysis/file_content_cache.dart';
// import 'package:analyzer/src/dart/analysis/unlinked_unit_store.dart';
//
// import 'heap/analysis.dart';
// import 'heap/format.dart';
// import 'heap/load.dart';
//
// /// --observe:5000 --disable-service-auth-codes --pause_isolates_on_unhandled_exceptions=false --pause_isolates_on_exit=false
// void main() async {
// // var path = '/Users/scheglov/dart/rwf-materials';
// // var path = '/Users/scheglov/dart/rwf-materials/01-setting-up-your-environment';
// var path =
// '/Users/scheglov/dart/rwf-materials/01-setting-up-your-environment/projects/starter/packages/component_library';
//
// // var profiler = ProcessProfiler.getProfilerForPlatform()!;
// while (true) {
// var resourceProvider = PhysicalResourceProvider.INSTANCE;
// var fileContentCache = FileContentCache(resourceProvider);
// var unlinkedUnitStore = UnlinkedUnitStoreImpl();
//
// var collection = AnalysisContextCollectionImpl(
// byteStore: MemoryByteStore(),
// resourceProvider: resourceProvider,
// fileContentCache: fileContentCache,
// unlinkedUnitStore: unlinkedUnitStore,
// sdkPath: '/Users/scheglov/Applications/dart-sdk',
// // performanceLog: PerformanceLog(stdout),
// includedPaths: [
// path,
// ],
// // packagesFile:
// // '/Users/scheglov/dart/rwf-materials/15-automating-test-executions-and-build-distributions/projects/final/.dart_tool/package_config.json',
// );
//
// print('[Analysis contexts: ${collection.contexts.length}]');
//
// // double maxMemory = 0;
// var timer = Stopwatch()..start();
// for (var analysisContext in collection.contexts) {
// // print(analysisContext.contextRoot.root.path);
// var analyzedFiles = analysisContext.contextRoot.analyzedFiles().toList();
// for (var filePath in analyzedFiles) {
// if (filePath.endsWith('.dart')) {
// // print(' $filePath');
// var analysisSession = analysisContext.currentSession;
// await analysisSession.getResolvedUnit(filePath);
//
// // collectAllGarbage();
//
// // var usageInfo = await profiler.getProcessUsage(pid);
// // var memoryMB = usageInfo!.memoryMB;
// // if (memoryMB > maxMemory) {
// // maxMemory = memoryMB;
// // print(' heap: $maxMemory MB');
// // // if (maxMemory > 2000) {
// // // writeHeapSnapshotToFile(
// // // '/Users/scheglov/dart/rwf-materials/2000.heap',
// // // );
// // // // await Future<void>.delayed(const Duration(seconds: 10));
// // // exit(0);
// // // }
// // }
// // maxMemory = max(maxMemory, usageInfo!.memoryMB);
// }
// }
// }
// timer.stop();
// print('[time: ${timer.elapsedMilliseconds} ms]');
//
// {
// var timer = Stopwatch()..start();
// var chunks = await loadFromUri(Uri.parse('http://127.0.0.1:5000'));
// // final length = chunks
// // .map((e) => e.lengthInBytes)
// // .fold<int>(0, (prev, e) => prev + e);
// // print(
// // ' [${timer.elapsedMilliseconds} ms] '
// // 'Downloaded heap snapshot, ${length / 1024 / 1024} MB.',
// // );
//
// if (0 == 1) {
// final bytesBuilder = BytesBuilder();
// for (final chunk in chunks) {
// bytesBuilder.add(
// chunk.buffer.asUint8List(
// chunk.offsetInBytes,
// chunk.lengthInBytes,
// ),
// );
// }
// final bytes = bytesBuilder.toBytes();
// final path = '/Users/scheglov/tmp/01.heap_snapshot';
// File(path).writeAsBytesSync(bytes);
// final lengthStr = (bytes.length / 1024 / 1024).toStringAsFixed(2);
// print('Stored $lengthStr MB into $path');
// }
//
// final graph = HeapSnapshotGraph.fromChunks(chunks);
// print(' [${timer.elapsedMilliseconds} ms] Created HeapSnapshotGraph.');
// print(' externalSize: ${graph.externalSize}');
// print(' shallowSize: ${graph.shallowSize}');
// print(' Objects: ${graph.objects.length}');
//
// final analysis = Analysis(graph);
// print(' [${timer.elapsedMilliseconds} ms] Created Analysis.');
//
// {
// print('All objects.');
// final objects = analysis.reachableObjects;
// final stats = analysis.generateObjectStats(objects);
// print(formatHeapStats(stats, maxLines: 20));
// print('');
// }
//
// {
// print('FileState(s)');
// var fileStateList = analysis.filter(
// analysis.reachableObjects,
// (object) {
// return object.klass.name == 'FileState';
// },
// );
// analysis.printObjectStats(fileStateList);
// print('');
// final allObjects = analysis.transitiveGraph(fileStateList);
// analysis.printObjectStats(allObjects);
// print('');
// }
//
// if (0 == 1) {
// print('Instances of: _SimpleUri');
// final uriList = analysis.filterByClassPatterns(
// analysis.reachableObjects,
// ['_SimpleUri'],
// );
// final stats = analysis.generateObjectStats(uriList);
// print(formatHeapStats(stats, maxLines: 20));
// print('');
//
// final uriStringList = analysis.findReferences(uriList, [':_uri']);
//
// // TODO(scheglov) Restore
// final uniqueUriStrSet = Set<String>();
// for (final objectId in uriStringList) {
// var object = graph.objects[objectId];
// var uriStr = object.data as String;
// if (!uniqueUriStrSet.add(uriStr)) {
// throw StateError('Duplicate URI: $uriStr');
// }
// }
//
// final dstats = analysis.generateDataStats(uriStringList);
// print(formatDataStats(dstats, maxLines: 20));
// }
//
// if (0 == 0) {
// print('Instances of: LibraryElementImpl');
// final uriList = analysis.filterByClassPatterns(
// analysis.reachableObjects,
// ['LibraryElementImpl'],
// );
// final stats = analysis.generateObjectStats(uriList);
// print(formatHeapStats(stats, maxLines: 20));
// print('');
// }
//
// if (0 == 0) {
// print('Instances of: _GrowableList');
// final objectList = analysis.filter(analysis.reachableObjects, (object) {
// return object.klass.libraryUri == Uri.parse('dart:core') &&
// object.klass.name == '_GrowableList';
// // return analysis.variableLengthOf(object) == 0;
// });
//
// // final objectList = analysis.filterByClassPatterns(
// // analysis.reachableObjects,
// // ['_GrowableList'],
// // );
// final stats = analysis.generateObjectStats(objectList);
// print(formatHeapStats(stats, maxLines: 20));
// print('');
//
// const maxEntries = 10;
// final paths = analysis.retainingPathsOf(objectList, 10);
// for (int i = 0; i < paths.length; ++i) {
// if (maxEntries != -1 && i >= maxEntries) break;
// final path = paths[i];
// print('There are ${path.count} retaining paths of');
// print(formatRetainingPath(analysis.graph, paths[i]));
// print('');
// }
//
// {
// print('Instances of empty: _GrowableList');
// final emptyList = analysis.filter(objectList, (object) {
// return analysis.variableLengthOf(object) == 0;
// });
// final stats = analysis.generateObjectStats(emptyList);
// print(formatHeapStats(stats, maxLines: 20));
// print('');
//
// // final paths = analysis.retainingPathsOf(emptyList, 10);
// // for (int i = 0; i < paths.length; ++i) {
// // if (maxEntries != -1 && i >= maxEntries) break;
// // final path = paths[i];
// // print('There are ${path.count} retaining paths of');
// // print(formatRetainingPath(analysis.graph, paths[i]));
// // print('');
// // }
// }
// // final dstats = analysis.generateDataStats(uriStringList);
// // print(formatDataStats(dstats, maxLines: 20));
// }
// }
//
// break;
//
// // writeHeapSnapshotToFile(
// // '/Users/scheglov/dart/rwf-materials/2001.heap',
// // );
// }
//
// // var analysisContext = collection.contextFor(path);
// // var unitResult = await analysisContext.currentSession.getResolvedUnit(path);
// // unitResult as ResolvedUnitResult;
//
// // await Future<void>.delayed(const Duration(days: 1));
// }
//
// extension on Analysis {
// void printObjectStats(IntSet objectIds) {
// final stats = generateObjectStats(objectIds);
// print(formatHeapStats(stats, maxLines: 20));
// print('');
// }
//
// void printRetainers(
// IntSet objectIds, {
// int maxEntries = 3,
// }) {
// final paths = retainingPathsOf(objectIds, 20);
// for (int i = 0; i < paths.length; ++i) {
// if (i >= maxEntries) break;
// final path = paths[i];
// print('There are ${path.count} retaining paths of');
// print(formatRetainingPath(graph, paths[i]));
// print('');
// }
// }
//
// IntSet filterByClass(
// IntSet objectIds, {
// required Uri libraryUri,
// required String name,
// }) {
// return filter(reachableObjects, (object) {
// return object.klass.libraryUri == libraryUri && object.klass.name == name;
// });
// }
// }