mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-12 14:27:22 -04:00
72 lines
2.1 KiB
Bash
Executable File
72 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Compares `dms ipc call` (direct socket) against `qs ipc call` on the same call.
|
|
# ITERATIONS=50 WARMUPS=3 CALL="lock isLocked" scripts/benchmark-ipc.sh
|
|
set -euo pipefail
|
|
|
|
ITERATIONS="${ITERATIONS:-50}"
|
|
WARMUPS="${WARMUPS:-3}"
|
|
CALL="${CALL:-lock isLocked}"
|
|
DMS_BIN="${DMS_BIN:-dms}"
|
|
QS_BIN="${QS_BIN:-qs}"
|
|
|
|
for bin in "$DMS_BIN" "$QS_BIN"; do
|
|
command -v "$bin" >/dev/null 2>&1 || { echo "not found: $bin" >&2; exit 1; }
|
|
done
|
|
|
|
# shellcheck disable=SC2206
|
|
call=($CALL)
|
|
if [[ -n "${QS_ARGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
qs_args=($QS_ARGS)
|
|
else
|
|
state_file="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/danklinux.path"
|
|
config_path="$(cat "$state_file" 2>/dev/null || true)"
|
|
[[ -n "$config_path" ]] || { echo "no running dms shell ($state_file missing)" >&2; exit 1; }
|
|
qs_args=(-p "$config_path")
|
|
fi
|
|
|
|
run_dms() { "$DMS_BIN" ipc call "${call[@]}"; }
|
|
run_qs() { "$QS_BIN" "${qs_args[@]}" ipc call "${call[@]}"; }
|
|
|
|
dms_out="$(run_dms)" || { echo "dms ipc call failed" >&2; exit 1; }
|
|
qs_out="$(run_qs)" || { echo "qs ipc call failed" >&2; exit 1; }
|
|
if [[ "$dms_out" != "$qs_out" ]]; then
|
|
echo "outputs differ:" >&2
|
|
echo " dms: $dms_out" >&2
|
|
echo " qs: $qs_out" >&2
|
|
exit 1
|
|
fi
|
|
|
|
measure() {
|
|
local fn="$1" i start end
|
|
for ((i = 0; i < WARMUPS; i++)); do "$fn" >/dev/null; done
|
|
for ((i = 0; i < ITERATIONS; i++)); do
|
|
start=$(date +%s%N)
|
|
"$fn" >/dev/null
|
|
end=$(date +%s%N)
|
|
echo $((end - start))
|
|
done
|
|
}
|
|
|
|
summarize() {
|
|
sort -n | awk '
|
|
{ v[NR] = $1; sum += $1 }
|
|
END {
|
|
median = (NR % 2) ? v[(NR + 1) / 2] : (v[NR / 2] + v[NR / 2 + 1]) / 2
|
|
printf "%.2f | %.2f | %.2f", v[1] / 1e6, median / 1e6, sum / NR / 1e6
|
|
}'
|
|
}
|
|
|
|
dms_stats="$(measure run_dms | summarize)"
|
|
qs_stats="$(measure run_qs | summarize)"
|
|
|
|
cat <<TABLE
|
|
IPC benchmark: \`$CALL\` ($ITERATIONS iterations, $WARMUPS warmups)
|
|
Output: $dms_out
|
|
|
|
| Command | Min (ms) | Median (ms) | Average (ms) |
|
|
|---|---:|---:|---:|
|
|
| dms ipc call | $dms_stats |
|
|
| qs ${qs_args[*]} ipc call | $qs_stats |
|
|
TABLE
|