stopAndAnalyse method
Stop recording and analyse — call this after screen interaction
Implementation
Future<ScreenPerformance> stopAndAnalyse(String screenName) async {
print(' ⏹️ Stopping recording, analysing frames...');
List<FrameData> frames;
try {
frames = List.of(_frameEvents);
if (frames.isEmpty) {
// No Flutter.Frame events — fall back to timeline parsing.
final timeline = await vmService.getVMTimeline();
frames = parseTimelineFrames([
for (final e in timeline.traceEvents ?? <TimelineEvent>[])
if (e.json != null) e.json!.cast<String, dynamic>(),
]);
}
} finally {
await _stopListening();
// Always turn timeline recording back off — leaving it running burns
// ring-buffer and CPU on-device for the rest of the session.
try {
await vmService.setVMTimelineFlags([]);
} catch (_) {}
}
final memoryKb = await _getMemoryKb();
return ScreenPerformance(
screenName: screenName,
frames: frames,
memoryKb: memoryKb,
);
}