Oregami
Repositories/oxedyne/fe2o3

oxedyne/fe2o3/fe2o3_austenite/tools/bench/edit_latency_runner.sh

3.1 KiB, 1 run, executable

created by r1870400018:60938, which is this file's identity for as long as the history lasts, whatever it is later renamed to

download · who wrote it · its history

1#!/usr/bin/env bash
2# Runs edit_latency.mjs for both wasm engines on each doc: a scripted run of
3# one-character edits against a live compiler instance, capped and timed like
4# every other run. See edit_latency.mjs for why typst.ts is timed on a full
5# `vector` recompile rather than its incr_compile API.
6set -uo pipefail
7
8HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9# shellcheck source=lib/host.sh
10source "$HERE/lib/host.sh"
11
12AUST_VENDOR="${AUST_VENDOR:?set AUST_VENDOR to the daimond austenite vendor dir}"
13TYPST_VENDOR="${TYPST_VENDOR:?set TYPST_VENDOR to the daimond typst.ts vendor dir}"
14EDITS="${EDITS:-10}"
15POSITIONS="${POSITIONS:-5}"
16OUT_DIR="${OUT_DIR:?set OUT_DIR}"
17DOCS=("$@")
18
19if [[ ${#DOCS[@]} -eq 0 ]]; then
20 echo "usage: OUT_DIR=... AUST_VENDOR=... TYPST_VENDOR=... edit_latency_runner.sh <doc.typ>..." >&2
21 exit 2
22fi
23
24mkdir -p "$OUT_DIR"
25JSONL="$OUT_DIR/edit_latency_runs.jsonl"
26: > "$JSONL"
27
28run_engine() {
29 local doc="$1" engine="$2" vendor="$3"
30 local docname; docname="$(basename "$doc" .typ)"
31 local stdout_f time_f
32 stdout_f="$(mktemp)"; time_f="$(mktemp)"
33
34 local load_before psi_cpu_before psi_mem_before
35 load_before="$(loadavg1)"; psi_cpu_before="$(psi_avg10 cpu)"; psi_mem_before="$(psi_avg10 memory)"
36
37 systemd-run --user --scope --quiet -p MemoryMax=3G --slice=claude-rc.slice -- \
38 /usr/bin/time -v -o "$time_f" -- \
39 node "$HERE/edit_latency.mjs" "--engine=$engine" "--vendor=$vendor" "--doc=$doc" \
40 "--edits=$EDITS" "--positions=$POSITIONS" \
41 > "$stdout_f" 2> /dev/null
42 local exit_code=$?
43
44 local load_after psi_cpu_after psi_mem_after
45 load_after="$(loadavg1)"; psi_cpu_after="$(psi_avg10 cpu)"; psi_mem_after="$(psi_avg10 memory)"
46
47 local rss_kb=0
48 [[ -f "$time_f" ]] && rss_kb="$(awk -F': ' '/Maximum resident set size/{print $2}' "$time_f")"
49 [[ -z "$rss_kb" ]] && rss_kb=0
50
51 local inner; inner="$(tail -n1 "$stdout_f" 2>/dev/null)"
52 [[ -z "$inner" ]] && inner='{"ok":false,"error":"no stdout from edit_latency.mjs"}'
53
54 local flagged=false
55 if awk -v a="$load_before" -v b="$load_after" -v t="$BENCH_LOAD_THRESHOLD" \
56 'BEGIN{exit !(a>t || b>t)}'; then
57 flagged=true
58 fi
59
60 jq -nc \
61 --arg doc "$docname" --arg engine "$engine" --argjson rss_kb "${rss_kb:-0}" \
62 --argjson exit_code "$exit_code" \
63 --argjson load_before "$load_before" --argjson load_after "$load_after" \
64 --argjson psi_cpu_before "$psi_cpu_before" --argjson psi_cpu_after "$psi_cpu_after" \
65 --argjson psi_mem_before "$psi_mem_before" --argjson psi_mem_after "$psi_mem_after" \
66 --argjson flagged_under_load "$flagged" --arg ts "$(date -u +%FT%TZ)" \
67 --argjson inner "$inner" \
68 '$inner * {ts:$ts, doc:$doc, engine:("edit-"+$engine), rss_kb:$rss_kb, exit_code:$exit_code,
69 load_before:$load_before, load_after:$load_after,
70 psi_cpu_before:$psi_cpu_before, psi_cpu_after:$psi_cpu_after,
71 psi_mem_before:$psi_mem_before, psi_mem_after:$psi_mem_after,
72 flagged_under_load:$flagged_under_load}' \
73 >> "$JSONL"
74
75 rm -f "$stdout_f" "$time_f"
76}
77
78for doc in "${DOCS[@]}"; do
79 run_engine "$doc" austenite "$AUST_VENDOR"
80 run_engine "$doc" typstts "$TYPST_VENDOR"
81 echo "[edit_latency] $(basename "$doc" .typ): austenite + typstts done" >&2
82done
83
84echo "$JSONL"