parseProfileCpuSamples function
Parses a stored VM CPU profile, restoring untyped function names and origins.
VM NativeFunction.toJson emits a name without a type discriminator.
The generic VM parser does not restore these objects on an artifact
round-trip. Only explicit names from the artifact are restored here.
Implementation
CpuSamples? parseProfileCpuSamples(Map<String, dynamic> json) {
final result = CpuSamples.parse(json);
if (result == null) return null;
final rawFunctions = json['functions'] as List? ?? const [];
final functions = result.functions ?? const <ProfileFunction>[];
for (var i = 0; i < functions.length; i++) {
final raw = (rawFunctions[i] as Map)['function'];
if (functions[i].function == null && raw is Map && raw['name'] is String) {
functions[i].function = NativeFunction(name: raw['name'] as String);
}
}
final rawSamples = json['samples'] as List? ?? const [];
final samples = result.samples ?? const <CpuSample>[];
result.samples = [
for (var i = 0; i < samples.length; i++)
ProfileCpuSample(
samples[i],
isolateId: (rawSamples[i] as Map)['profilerIsolateId'] as String?,
),
];
return result;
}