arblant
Railynx / lib / app / latency.dart
latency.dart39 lines · 908 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
import 'package:flutter/material.dart';

import 'tokens.dart';

/// Latency tiers from ui.html: fast <120, mid 120-300, slow 300-600, poor >600.
enum LatencyTier { fast, mid, slow, poor }

LatencyTier tierFor(int ms) {
  if (ms < 120) {
    return LatencyTier.fast;
  }
  if (ms < 300) {
    return LatencyTier.mid;
  }
  if (ms <= 600) {
    return LatencyTier.slow;
  }
  return LatencyTier.poor;
}

Color tierColor(LatencyTier tier) {
  switch (tier) {
    case LatencyTier.fast:
      return Tokens.fast;
    case LatencyTier.mid:
      return Tokens.mid;
    case LatencyTier.slow:
      return Tokens.slow;
    case LatencyTier.poor:
      return Tokens.poor;
  }
}

/// Width fraction of the result bar: max(6, 100 * (1 - min(ms, 700) / 700)) percent.
double barFraction(int ms) {
  final pct = 100 * (1 - (ms < 700 ? ms : 700) / 700);
  final clamped = pct < 6 ? 6.0 : pct;
  return clamped / 100;
}