foot/scripts/benchmark.py

52 lines
1.3 KiB
Python
Raw Normal View History

2020-05-31 12:43:03 +02:00
#!/usr/bin/env -S python3 -u
import argparse
import fcntl
import os
import statistics
import struct
import sys
import termios
from datetime import datetime
2025-12-26 13:13:01 +01:00
def main() -> None:
2020-05-31 12:43:03 +02:00
parser = argparse.ArgumentParser()
parser.add_argument('files', type=argparse.FileType('rb'), nargs='+')
parser.add_argument('--iterations', type=int, default=20)
args = parser.parse_args()
lines, cols, height, width = struct.unpack(
'HHHH',
fcntl.ioctl(sys.stdout.fileno(),
termios.TIOCGWINSZ,
struct.pack('HHHH', 0, 0, 0, 0)))
2025-12-26 13:13:01 +01:00
times: dict[str, list[float]] = {name: [] for name in [f.name for f in args.files]}
2020-05-31 12:43:03 +02:00
for f in args.files:
bench_bytes = f.read()
2025-12-26 13:13:01 +01:00
for _ in range(args.iterations):
2020-05-31 12:43:03 +02:00
start = datetime.now()
sys.stdout.buffer.write(bench_bytes)
stop = datetime.now()
times[f.name].append((stop - start).total_seconds())
del bench_bytes
print('\033[J')
print(times)
print(f'cols={cols}, lines={lines}, width={width}px, height={height}px')
for f in args.files:
print(f'{os.path.basename(f.name)}: '
f'{statistics.mean(times[f.name]):.3f}s '
f'±{statistics.stdev(times[f.name]):.3f}')
if __name__ == '__main__':
2025-12-26 13:13:01 +01:00
main()