blob: 049b03559cca5ccd1f3e772bb57c858c5b32a042 (
plain)
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
40
41
42
43
44
45
46
47
48
49
|
#!/bin/bash
set -euo pipefail
BIN=".build/release/pixel-sort"
INPUT="examples/input-1920x1080.png"
OUTPUT="/tmp/pixel-sort-bench-output.png"
ITERS="${1:-100}"
echo "Binary: $BIN"
echo "Input: $INPUT"
echo "Iterations: $ITERS"
echo ""
# Warmup
"$BIN" "$INPUT" "$OUTPUT" >/dev/null 2>&1
times=()
for i in $(seq 1 "$ITERS"); do
t=$( { /usr/bin/time -p "$BIN" "$INPUT" "$OUTPUT" ; } 2>&1 | awk '/^real/ {print $2}')
times+=("$t")
done
# Sort and compute stats
sorted=($(printf '%s\n' "${times[@]}" | sort -n))
n=${#sorted[@]}
min=${sorted[0]}
max=${sorted[$((n-1))]}
median=${sorted[$((n/2))]}
p95=${sorted[$(( (n * 95) / 100 ))]}
p99=${sorted[$(( (n * 99) / 100 ))]}
sum=$(printf '%s\n' "${times[@]}" | awk '{s+=$1} END {print s}')
mean=$(echo "$sum $n" | awk '{printf "%.4f", $1/$2}')
echo "=== Results (1920x1080, ${ITERS} runs) ==="
echo " Min: ${min}s"
echo " Mean: ${mean}s"
echo " Median: ${median}s"
echo " P95: ${p95}s"
echo " P99: ${p99}s"
echo " Max: ${max}s"
echo ""
echo " Target: ≤0.002s (2ms) P95"
p95_ms=$(echo "$p95" | awk '{printf "%.1f", $1 * 1000}')
pass=$(echo "$p95" | awk '{print ($1 <= 0.002) ? "PASS" : "FAIL"}')
echo " P95 = ${p95_ms}ms → ${pass}"
rm -f "$OUTPUT"
|