blob: 881560c5156c044004b4452dcdeaf36ac9f1d72a [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;
// // });
// // }
// // }