{
  "baseline_captured": "2026-04-18",
  "tool": "firmware/tests/bench_ax25.c",
  "build_profile": "host / gcc -O2 / SIMULATION_MODE",
  "host_cpu": "x86_64, modern desktop class",
  "iterations_per_case": 10000,
  "frame_size_bytes": 69,
  "notes": [
    "Host numbers are a lower bound on the target MCU; Cortex-M4 @ 168 MHz is typically 10-20x slower on pure-C integer code.",
    "Percentiles (p50/p95/p99) are the primary signal. The `max` captures first-iteration outliers from branch-predictor warmup, instruction-cache misses, and OS scheduler preemption — treat p99 as the authoritative worst-case budget check.",
    "Budgets from docs/superpowers/specs/2026-04-17-track1-ax25-design.md §4.11: encode < 5000 us, decode < 2000 us per frame @ 168 MHz. Both the mean and p99 clear the budget on host by multiple orders of magnitude; projected ARM worst case (20x host p99) still clears every budget with a comfortable margin."
  ],
  "results": [
    {
      "name": "ax25_encode_ui_frame",
      "mean_us": 7.653,
      "min_us": 3.851,
      "p50_us": 7.290,
      "p95_us": 10.332,
      "p99_us": 28.983,
      "max_us": 1239.747,
      "budget_target_us": 5000.0,
      "within_budget": true
    },
    {
      "name": "ax25_decoder_push_byte_whole_frame",
      "mean_us": 6.217,
      "min_us": 4.022,
      "p50_us": 5.150,
      "p95_us": 9.940,
      "p99_us": 13.302,
      "max_us": 335.695,
      "budget_target_us": 2000.0,
      "within_budget": true
    },
    {
      "name": "ax25_decode_ui_frame_pure",
      "mean_us": 1.338,
      "min_us": 1.247,
      "p50_us": 1.261,
      "p95_us": 1.562,
      "p99_us": 1.793,
      "max_us": 54.172,
      "budget_target_us": 2000.0,
      "within_budget": true
    },
    {
      "name": "hmac_sha256_48B_beacon",
      "mean_us": 4.517,
      "min_us": 4.092,
      "p50_us": 4.316,
      "p95_us": 5.552,
      "p99_us": 6.453,
      "max_us": 108.240,
      "budget_target_us": 5000.0,
      "within_budget": true
    }
  ]
}
