getHeapUsage function

Future<MemResult> getHeapUsage(
  1. MemInput _
)

Returns heap usage totals for every isolate in the running VM.

Never throws; all error conditions are represented as sealed result cases.

Implementation

Future<MemResult> getHeapUsage(MemInput _) async {
  try {
    final isolateIds = await findAllIsolateIds();
    final infos = <IsolateHeapInfo>[];
    for (final id in isolateIds) {
      try {
        final mem = await getMemoryUsage(id);
        final heapUsage = mem.heapUsage;
        final externalUsage = mem.externalUsage;
        final heapCapacity = mem.heapCapacity;
        if (heapUsage == null || externalUsage == null || heapCapacity == null) {
          continue;
        }
        infos.add(IsolateHeapInfo(
          id: id,
          name: await _isolateName(id),
          heapUsage: heapUsage,
          externalUsage: externalUsage,
          heapCapacity: heapCapacity,
        ));
      } on AppDiedException {
        rethrow;
      } catch (_) {
        // Skip isolates that don't expose getMemoryUsage (e.g. system isolates).
      }
    }
    return MemSuccess(infos);
  } on AppDiedException catch (e) {
    return MemAppDied(logLines: e.logLines, reason: e.reason);
  } catch (e) {
    return MemError(e.toString());
  }
}