getHeapUsage function
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());
}
}