| // // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file |
| // // for details. All rights reserved. Use of this source code is governed by a |
| // // BSD-style license that can be found in the LICENSE file. |
| // |
| // import 'dart:async'; |
| // import 'dart:typed_data'; |
| // |
| // import 'package:vm_service/vm_service.dart'; |
| // import 'package:vm_service/vm_service_io.dart'; |
| // |
| // Future<List<ByteData>> loadFromUri(Uri uri) async { |
| // final Uri wsUri; |
| // if (uri.isScheme("ws")) { |
| // wsUri = uri; |
| // } else { |
| // if (uri.path.isEmpty || uri.path == "/") { |
| // uri = uri.replace(path: "/ws"); |
| // } else if (uri.path.endsWith("/")) { |
| // uri = uri.replace(path: "${uri.path}ws"); |
| // } else { |
| // uri = uri.replace(path: "${uri.path}/ws"); |
| // } |
| // wsUri = uri.replace(scheme: 'ws'); |
| // } |
| // final service = await vmServiceConnectUri(wsUri.toString()); |
| // try { |
| // final r = await _getHeapsnapshot(service); |
| // return r; |
| // } finally { |
| // await service.dispose(); |
| // } |
| // } |
| // |
| // Future<List<ByteData>> _getHeapsnapshot(VmService service) async { |
| // final vm = await service.getVM(); |
| // final vmIsolates = vm.isolates!; |
| // if (vmIsolates.isEmpty) { |
| // throw 'Could not find first isolate (expected it to be running already)'; |
| // } |
| // final isolateRef = vmIsolates.first; |
| // |
| // await service.streamListen(EventStreams.kHeapSnapshot); |
| // |
| // final chunks = <ByteData>[]; |
| // final done = Completer(); |
| // late StreamSubscription streamSubscription; |
| // streamSubscription = service.onHeapSnapshotEvent.listen((e) async { |
| // chunks.add(e.data!); |
| // if (e.last!) { |
| // await service.streamCancel(EventStreams.kHeapSnapshot); |
| // await streamSubscription.cancel(); |
| // done.complete(); |
| // } |
| // }); |
| // |
| // await service.requestHeapSnapshot(isolateRef.id!); |
| // await done.future; |
| // |
| // return chunks; |
| // } |