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