import time import json import sys import struct import io from importlib import import_module from os.path import join BASE_DIR = r'd:\obw_benchmark' lst = [ # bz2 'linux-2.6.39.4.tar.bz2', 'firefox-79.0.linux-i686.tar.bz2', 'ffmpeg-4.3.1.tar.bz2', 'gimp-2.10.20.tar.bz2', 'sde-external-8.56.0-2020-07-05-lin.tar.bz2', # lzma 'linux-5.7.10.tar.xz', 'linux-2.6.39.4.tar.xz', 'gcc-9.3.0.tar.xz', 'Python-3.8.5.tar.xz', 'firefox-79.0.source.tar.xz', # gzip(zlib) 'linux-5.7.10.tar.gz', 'linux-2.6.39.4.tar.gz', 'gcc-9.3.0.tar.gz', 'Python-3.8.5.tgz', 'openjdk-14.0.2_linux-x64_bin.tar.gz', 'postgresql-10.12-1-linux-x64-binaries.tar.gz', ] def compute_speed(ref, changed): speed = ref / changed percent = (changed - ref) * 100.0 / ref if speed == 1.0: return "no change" elif speed > 1.0: return "%.2fx faster (%+.0f%%)" % (speed, percent) else: return "%.2fx slower (%+.0f%%)" % (1.0 / speed, percent) def compare(ref, changed): with open(ref) as f: o1 = json.load(f) with open(changed) as f: o2 = json.load(f) for k, v in o2.items(): if k in o1: name1, in_len1, out_len1, time1 = o1[k] name2, in_len2, out_len2, time2 = v in_len1 = format(in_len1, ',') out_len1 = format(out_len1, ',') r = compute_speed(time1, time2) print(f'{name1}') print(f'input size: {in_len1}, output size: {out_len1}') print(f'best of 5: [{ref}] {time1:.3f} sec -> [{changed}] {time2:.3f} sec, {r}\n') def _skip_gzip_header(dat): FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16 offset = 2 (method, flag, _last_mtime) = struct.unpack("