powermetrics/tmux-wall.sh

71 lines
2.4 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
session_name="${TMUX_SESSION_NAME:-powermetrics}"
window_name="${TMUX_WINDOW_NAME:-wall}"
recreate_session="${TMUX_RECREATE:-0}"
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
sample_ms="${SAMPLE_MS:-5000}"
hold_sec="${HOLD_SEC:-6}"
display_bias_w="${DISPLAY_BIAS_W:-}"
clamshell_factor="${CLAMSHELL_FACTOR:-}"
ambient_c="${AMBIENT_C:-}"
idle_offset_c="${IDLE_OFFSET_C:-}"
cpu_theta="${CPU_THETA_C_PER_W:-}"
gpu_theta="${GPU_THETA_C_PER_W:-}"
if [[ "${EUID}" -ne 0 ]]; then
exec sudo --preserve-env=TMUX_SESSION_NAME,TMUX_WINDOW_NAME,TMUX_RECREATE,SAMPLE_MS,HOLD_SEC,DISPLAY_BIAS_W,CLAMSHELL_FACTOR,AMBIENT_C,IDLE_OFFSET_C,CPU_THETA_C_PER_W,GPU_THETA_C_PER_W bash "$0" "$@"
fi
if ! command -v tmux >/dev/null 2>&1; then
echo "tmux is not installed." >&2
exit 1
fi
if ! command -v powermetrics >/dev/null 2>&1; then
echo "powermetrics is not available on this system." >&2
exit 1
fi
if [[ ! -x "${script_dir}/CPUwall.sh" || ! -x "${script_dir}/GPUwall.sh" ]]; then
echo "CPUwall.sh and GPUwall.sh must be executable. Run: chmod +x CPUwall.sh GPUwall.sh tmux-wall.sh" >&2
exit 1
fi
env_prefix="SAMPLE_MS=${sample_ms} HOLD_SEC=${hold_sec}"
if [[ -n "${display_bias_w}" ]]; then
env_prefix="${env_prefix} DISPLAY_BIAS_W=${display_bias_w}"
fi
if [[ -n "${clamshell_factor}" ]]; then
env_prefix="${env_prefix} CLAMSHELL_FACTOR=${clamshell_factor}"
fi
if [[ -n "${ambient_c}" ]]; then
env_prefix="${env_prefix} AMBIENT_C=${ambient_c}"
fi
if [[ -n "${idle_offset_c}" ]]; then
env_prefix="${env_prefix} IDLE_OFFSET_C=${idle_offset_c}"
fi
if [[ -n "${cpu_theta}" ]]; then
env_prefix="${env_prefix} CPU_THETA_C_PER_W=${cpu_theta}"
fi
if [[ -n "${gpu_theta}" ]]; then
env_prefix="${env_prefix} GPU_THETA_C_PER_W=${gpu_theta}"
fi
if tmux has-session -t "${session_name}" 2>/dev/null; then
if [[ "${recreate_session}" == "1" ]]; then
tmux kill-session -t "${session_name}"
else
exec tmux attach -t "${session_name}"
fi
fi
tmux new-session -d -s "${session_name}" -n "${window_name}" -c "${script_dir}"
tmux send-keys -t "${session_name}:${window_name}.0" "${env_prefix} ./CPUwall.sh" C-m
tmux split-window -h -t "${session_name}:${window_name}" -c "${script_dir}"
tmux send-keys -t "${session_name}:${window_name}.1" "${env_prefix} ./GPUwall.sh" C-m
tmux select-layout -t "${session_name}:${window_name}" even-horizontal
exec tmux attach -t "${session_name}"