Squash commits for public release
This commit is contained in:
75
utils/test/bench.py
Normal file
75
utils/test/bench.py
Normal file
@@ -0,0 +1,75 @@
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
from tabulate import tabulate
|
||||
from termcolor import colored
|
||||
import signal
|
||||
|
||||
target_arch = sys.argv[1]
|
||||
|
||||
process = subprocess.Popen(
|
||||
"./run_tester.sh", stdout=subprocess.PIPE, preexec_fn=os.setpgrp)
|
||||
string = ""
|
||||
|
||||
sum_of_benchs = {}
|
||||
count_of_benchs = {}
|
||||
|
||||
# For github CI
|
||||
expected_benchmark_results = {
|
||||
"x86": {
|
||||
"FORK": 320000,
|
||||
"PNG LOADER": 1180000
|
||||
},
|
||||
"arm32": {
|
||||
"FORK": 954667,
|
||||
"PNG LOADER": 5176000
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def print_results():
|
||||
print(colored("Bench results:", color="white", attrs=["bold"]))
|
||||
res = []
|
||||
mper = 0.0
|
||||
for key, value in sum_of_benchs.items():
|
||||
new_val = int(value / count_of_benchs[key])
|
||||
percent = (1 - new_val /
|
||||
expected_benchmark_results[target_arch][key]) * 100
|
||||
res.append([key, expected_benchmark_results[target_arch][key],
|
||||
new_val, "{:.2f}%".format(percent)])
|
||||
mper = min(mper, percent)
|
||||
|
||||
data = tabulate(
|
||||
res, headers=['Test', 'Expected ({0})'.format(target_arch), 'Got', 'Diff'], tablefmt='orgtbl')
|
||||
print(data)
|
||||
if (mper < -50):
|
||||
print(colored("Crashing: too big performance drop ({0}%)!!!".format(
|
||||
mper), color="red", attrs=["bold"]))
|
||||
exit(1)
|
||||
|
||||
|
||||
def process_string(string):
|
||||
if (string.startswith("[BENCH]")):
|
||||
end_of_date = string.find(" (usec)")
|
||||
start_of_date = string.find("] ") + 2
|
||||
pr = string[8:start_of_date - 2]
|
||||
it = int(string[start_of_date:end_of_date])
|
||||
if count_of_benchs.get(pr, None) is None:
|
||||
sum_of_benchs[pr] = 0
|
||||
count_of_benchs[pr] = 0
|
||||
|
||||
sum_of_benchs[pr] += it
|
||||
count_of_benchs[pr] += 1
|
||||
|
||||
if (string.startswith("[BENCH END]")):
|
||||
os.killpg(os.getpgid(process.pid), signal.SIGTERM)
|
||||
print_results()
|
||||
|
||||
|
||||
for c in iter(lambda: process.stdout.read(1), b''):
|
||||
letter = c.decode()
|
||||
if letter == "\n":
|
||||
process_string(string)
|
||||
string = ""
|
||||
else:
|
||||
string += letter
|
||||
Reference in New Issue
Block a user