printReport method
void
printReport()
Implementation
void printReport() {
final budget = PerformanceCapture.frameBudgetMs.toStringAsFixed(1);
print('\n┌─────────────────────────────────────────────┐');
print('│ PERFORMANCE — $screenName');
print('├─────────────────────────────────────────────┤');
print('│ Grade : $gradeEmoji $grade');
print('│ Total frames : $totalFrames');
print('│ Janky frames : $jankyFrames (${jankRate.toStringAsFixed(1)}%)');
print('│ Avg build : ${avgBuildMs.toStringAsFixed(2)}ms '
'(budget: ${budget}ms)');
print('│ Avg raster : ${avgRasterMs.toStringAsFixed(2)}ms');
print('│ Worst frame : ${worstFrameMs.toStringAsFixed(2)}ms');
if (memoryKb > 0) {
print('│ Memory : ${(memoryKb / 1024).toStringAsFixed(1)}MB');
}
print('└─────────────────────────────────────────────┘');
if (jankyFrames > 0) {
print(
'\n ⚠️ Jank detected — user will feel stuttering on this screen.');
}
if (avgBuildMs > PerformanceCapture.frameBudgetMs) {
print(
' ⚠️ Avg build time exceeds the ${budget}ms frame budget — check for heavy build() work.');
}
if (avgRasterMs > PerformanceCapture.frameBudgetMs / 2) {
print(
' ⚠️ High raster time — check for expensive painting operations,');
print(' clipPath, saveLayer, or large image decoding.');
}
if (memoryKb > 200 * 1024) {
print(' ⚠️ Memory over 200MB — check for image cache or leak.');
}
}