mirror of
https://github.com/cuberite/libdeflate.git
synced 2025-08-03 17:56:17 -04:00
118 lines
2.3 KiB
Bash
Executable File
118 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -eu -o pipefail
|
|
topdir="$(dirname "$0")/.."
|
|
tmpfile=$(mktemp)
|
|
trap 'rm -f $tmpfile' EXIT
|
|
|
|
run_benchmark()
|
|
{
|
|
local best_ctime=1000000000
|
|
local i
|
|
|
|
for i in $(seq "$NUM_ITERATIONS"); do
|
|
"$@" > "$tmpfile"
|
|
csize=$(awk '/Compressed/{print $4}' "$tmpfile")
|
|
ctime=$(awk '/Compression time/{print $3}' "$tmpfile")
|
|
if (( ctime < best_ctime )); then
|
|
best_ctime=$ctime
|
|
fi
|
|
: "$i" # make shellcheck happy
|
|
done
|
|
CSIZE=$csize
|
|
CTIME=$best_ctime
|
|
}
|
|
|
|
multifile()
|
|
{
|
|
local file results cmd best em
|
|
|
|
NUM_ITERATIONS=1
|
|
|
|
echo "File | zlib -6 | zlib -9 | libdeflate -6 | libdeflate -9 | libdeflate -12"
|
|
echo "-----|---------|---------|---------------|---------------|---------------"
|
|
|
|
for file in "$@"; do
|
|
echo -n "$(basename "$file")"
|
|
results=()
|
|
cmd=("$topdir/benchmark" -s"$(stat -c "%s" "$file")" "$file")
|
|
run_benchmark "${cmd[@]}" -Y -6
|
|
results+=("$CSIZE")
|
|
run_benchmark "${cmd[@]}" -Y -6
|
|
results+=("$CSIZE")
|
|
run_benchmark "${cmd[@]}" -6
|
|
results+=("$CSIZE")
|
|
run_benchmark "${cmd[@]}" -9
|
|
results+=("$CSIZE")
|
|
run_benchmark "${cmd[@]}" -12
|
|
results+=("$CSIZE")
|
|
best=2000000000
|
|
for result in "${results[@]}"; do
|
|
if (( result < best)); then
|
|
best=$result
|
|
fi
|
|
done
|
|
for result in "${results[@]}"; do
|
|
if (( result == best )); then
|
|
em="**"
|
|
else
|
|
em=""
|
|
fi
|
|
echo -n " | ${em}${result}${em}"
|
|
done
|
|
echo
|
|
done
|
|
}
|
|
|
|
single_file()
|
|
{
|
|
local file=$1
|
|
local usize args
|
|
local include_old=false
|
|
|
|
usize=$(stat -c "%s" "$file")
|
|
: ${NUM_ITERATIONS:=3}
|
|
|
|
if [ -e "$topdir/benchmark-old" ]; then
|
|
include_old=true
|
|
fi
|
|
echo -n "Level | libdeflate (new) "
|
|
if $include_old; then
|
|
echo -n "| libdeflate (old) "
|
|
fi
|
|
echo "| zlib"
|
|
echo -n "------|------------------"
|
|
if $include_old; then
|
|
echo -n "|------------------"
|
|
fi
|
|
echo "|-----"
|
|
for level in {1..12}; do
|
|
echo -n "$level"
|
|
args=("$file" -s "$usize" "-$level")
|
|
|
|
run_benchmark "$topdir/benchmark" "${args[@]}"
|
|
echo -n " | $CSIZE / $CTIME"
|
|
|
|
if $include_old; then
|
|
run_benchmark "$topdir/benchmark-old" "${args[@]}"
|
|
echo -n " | $CSIZE / $CTIME"
|
|
fi
|
|
|
|
if (( level > 9 )); then
|
|
echo -n " | N/A"
|
|
else
|
|
run_benchmark "$topdir/benchmark" "${args[@]}" -Y
|
|
echo -n " | $CSIZE / $CTIME"
|
|
fi
|
|
echo
|
|
done
|
|
}
|
|
|
|
if (( $# > 1 )); then
|
|
multifile "$@"
|
|
elif (( $# == 1 )); then
|
|
single_file "$@"
|
|
else
|
|
echo 1>&2 "Usage: $0 FILE..."
|
|
fi
|