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 vmServiceCall('getMemoryUsage', params: {'isolateId': id}))['result'] as Map<String, dynamic>?;
        if (mem == null) continue;
        infos.add(IsolateHeapInfo(
          id: id,
          name: await _isolateName(id),
          heapUsage: (mem['heapUsage'] as num).toInt(),
          externalUsage: (mem['externalUsage'] as num).toInt(),
          heapCapacity: (mem['heapCapacity'] as num).toInt(),
        ));
      } 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());
  }
}