getStats method

PerformanceStats getStats(
  1. String category,
  2. bool microseconds
)

Gets performance statistics for a category

Implementation

PerformanceStats getStats(String category, bool microseconds) {
  final metrics = _completedMetrics[category] ?? [];
  if (metrics.isEmpty) {
    return PerformanceStats.empty(category);
  }

  final durations = microseconds ? metrics.map((m) => m.duration.inMicroseconds).toList() : metrics.map((m) => m.duration.inMilliseconds).toList();
  durations.sort();

  final int count = durations.length;
  final int sum = durations.reduce((a, b) => a + b);
  final double mean = sum / count;
  final double median = count % 2 == 0 ? (durations[count ~/ 2 - 1] + durations[count ~/ 2]) / 2 : durations[count ~/ 2].toDouble();

  final int min = durations.first;
  final int max = durations.last;
  final int p95 = durations[(count * 0.95).floor()];
  final int p99 = durations[(count * 0.99).floor()];

  // Calculate standard deviation
  final double variance = durations.map((d) => Math.pow(d - mean, 2)).reduce((a, b) => a + b) / count;
  final double stdDev = Math.sqrt(variance);

  return PerformanceStats(
    count: count,
    mean: mean.round(),
    median: median.round(),
    min: min,
    max: max,
    p95: p95,
    p99: p99,
    standardDeviation: stdDev.round(),
    sum: sum,
  );
}