clipmenu-spmenu/tests/test-perf

92 lines
2 KiB
Plaintext
Raw Normal View History

2018-10-31 09:12:09 +01:00
#!/usr/bin/env bash
2017-01-06 11:48:02 +01:00
major_version=6
2017-01-06 11:48:02 +01:00
msg() {
printf '>>> %s\n' "$@" >&2
}
: "${CM_DIR="${XDG_RUNTIME_DIR-"${TMPDIR-/tmp}"}"}"
dir=$CM_DIR/clipmenu.$major_version.$USER
cache_file=$dir/line_cache
2017-01-06 11:48:02 +01:00
log=$(mktemp)
tim=$(mktemp)
clipmenu_shim=$(mktemp)
num_files=1500
trap 'rm -f -- "$log" "$tim" "$clipmenu_shim"' EXIT
if [[ $0 == /* ]]; then
location=${0%/*}
else
location=$PWD/${0#./}
location=${location%/*}
fi
msg 'Setting up edited clipmenu'
cat - "$location/../clipmenu" > /tmp/clipmenu << EOF
2018-10-31 09:12:09 +01:00
#!/usr/bin/env bash
2017-01-06 11:48:02 +01:00
exec 3>&2 2> >(tee "$log" |
sed -u 's/^.*$/now/' |
date -f - +%s.%N > "$tim")
set -x
dmenu() { :; }
xsel() { :; }
2017-01-06 11:48:02 +01:00
EOF
chmod a+x /tmp/clipmenu
if ! (( NO_RECREATE )); then
rm -rf "$dir"
mkdir -p "$dir"
msg "Writing $num_files clipboard files"
for (( i = 0; i <= num_files; i++ )); do
(( i % 100 )) || printf '%s... ' "$i"
line_len=$(( (RANDOM % 10000) + 1 ))
num_lines=$(( (RANDOM % 10) + 1 ))
data=$(
tr -dc 'a-zA-Z0-9' < /dev/urandom |
fold -w "$line_len" |
head -"$num_lines"
)
read -r first_line_raw <<< "$data"
printf -v first_line '%s (%s lines)\n' "$first_line_raw" "$num_lines"
2018-02-20 12:30:07 +01:00
printf '%d %s' "$i" "$first_line" >> "$cache_file"
fn=$dir/$(cksum <<< "$first_line")
2017-01-06 11:48:02 +01:00
printf '%s' "$data" > "$fn"
done
printf 'done\n'
else
msg 'Not nuking/creating new clipmenu files'
fi
msg 'Running modified clipmenu'
time /tmp/clipmenu
(( TIME_ONLY )) && exit 0
msg 'Displaying perf data'
# modified from http://stackoverflow.com/a/20855353/945780
paste <(
while read -r tim ;do
[ -z "$last" ] && last=${tim//.} && first=${tim//.}
crt=000000000$((${tim//.}-10#0$last))
ctot=000000000$((${tim//.}-10#0$first))
printf "%12.9f %12.9f\n" ${crt:0:${#crt}-9}.${crt:${#crt}-9} \
${ctot:0:${#ctot}-9}.${ctot:${#ctot}-9}
last=${tim//.}
done < "$tim"
) "$log" | less