未验证 提交 c66d6344 编写于 作者: O openharmony_ci 提交者: Gitee

!940 fix code format of compare_benchmark_result.py

Merge pull request !940 from yinchuang/fix_code_check
...@@ -17,73 +17,76 @@ ...@@ -17,73 +17,76 @@
import argparse import argparse
import re import re
g_before_data = {}
g_after_data = {}
g_all_cases = []
class BenchmarkDataParser:
def get_format(before_data, after_data, pct, fluctuation_range): def __init__(self):
deg_format = "\033[1;31m|{:60}|{:20}|{:20}|{:20}\033[0m|" self.benchmark_data_before = {}
opt_format = "\033[1;32m|{:60}|{:20}|{:20}|{:20}\033[0m|" self.benchmark_data_after = {}
equal_format = "\033[1;37m|{:60}|{:20}|{:20}|{:20}\033[0m|" self.all_cases = []
if pct <= fluctuation_range:
return equal_format @staticmethod
if before_data > after_data: def get_format(before_data, after_data, pct, fluctuation_range):
return opt_format deg_format = "\033[1;31m|{:60}|{:20}|{:20}|{:20}\033[0m|"
else: opt_format = "\033[1;32m|{:60}|{:20}|{:20}|{:20}\033[0m|"
return deg_format equal_format = "\033[1;37m|{:60}|{:20}|{:20}|{:20}\033[0m|"
if pct <= fluctuation_range:
return equal_format
def read_file(file_path, is_before): if before_data > after_data:
bench_pattern = re.compile(r''' return opt_format
^([\S]+) # case name else:
[^0-9]+ return deg_format
([0-9,.]+) # time
[^0-9]+ @staticmethod
([0-9|.]+) # cpu def print_header(args):
[^0-9]+ header_format = "\033[1;37m|{:60}|{:20}|{:20}|{:20}|\033[0m"
([0-9|.]+) # iters print("\033[1;34m[Notice]:\033[0m")
.*''', re.VERBOSE) print("file before optimization: " + args.before)
print("file after optimization: " + args.after)
with open(file_path, 'r') as f: print("allowed fluctuation range: " + args.range + "%")
for line in f.readlines(): print("\033[1;32mgreen is better, \033[0m" +
if line.startswith("BM_"): "\033[1;31mred is worse, \033[0m" +
"\033[1;37mwhite is equal.\033[0m")
print("\033[1;34m[Compare Result]:\033[0m")
print(header_format.format("case", "before(ns)", "after(ns)", "(before - after / before)"))
print(header_format.format("----", "----", "----", "----"))
def read_file(self, file_path, is_before):
bench_pattern = re.compile(r'''
^([\S]+) # case name
[^0-9]+
([0-9,.]+) # time
[^0-9]+
([0-9|.]+) # cpu
[^0-9]+
([0-9|.]+) # iters
.*''', re.VERBOSE)
if is_before:
current_data = self.benchmark_data_before
else:
current_data = self.benchmark_data_after
lines = open(file_path, 'r').readlines()
for line in lines:
if line.lower().startswith("bm_"):
m = bench_pattern.match(line) m = bench_pattern.match(line)
if m: if m:
case, time, cpu, iters = m.groups() case, time, cpu, iters = m.groups()
if g_all_cases.count(case) == 0: self.all_cases.append(case) if self.all_cases.count(case) == 0 else self.all_cases
g_all_cases.append(case) current_data[case] = [float(time), float(cpu), float(iters)]
result = [float(time), float(cpu), float(iters)]
if is_before:
g_before_data[case] = result
else:
g_after_data[case] = result
else: else:
print("match error") print("match error: {}".format(line))
def out_results(self, args):
def print_header(args): self.print_header(args)
header_format = "\033[1;37m|{:60}|{:20}|{:20}|{:20}|\033[0m" for case in self.all_cases:
print("\033[1;34m[Notice]:\033[0m") before_data = self.benchmark_data_before[case][0] if case in self.benchmark_data_before.keys() else 0
print("file before optimization: " + args.before) after_data = self.benchmark_data_after[case][0] if case in self.benchmark_data_after.keys() else 0
print("file after optimization: " + args.after) pct = 0 if before_data == 0 else round((abs(before_data - after_data) / before_data) * 100, 2)
print("allowed fluctuation range: " + args.range + "%") sign = "+" if (before_data - after_data) > 0 else "-"
print("\033[1;32mgreen is better, \033[0m" + "\033[1;31mred is worse, \033[0m" + "\033[1;37mwhite is equal.\033[0m") output_format = self.get_format(before_data, after_data, pct, float(args.range))
print("\033[1;34m[Compare Result]:\033[0m") signed_pct = "{}{}{}".format(sign, str(pct), "%")
print(header_format.format("case", "before(ns)", "after(ns)", "(before - after / before)")) print(output_format.format(str(case), str(before_data), str(after_data), signed_pct))
print(header_format.format("----", "----", "----", "----"))
def out_results(args):
print_header(args)
for case in g_all_cases:
before_data = g_before_data[case][0] if case in g_before_data.keys() else 0
after_data = g_after_data[case][0] if case in g_after_data.keys() else 0
pct = 0 if before_data == 0 else round((abs(before_data - after_data) / before_data) * 100, 2)
sign = "+" if (before_data - after_data) > 0 else "-"
output_format = get_format(before_data, after_data, pct, float(args.range))
signed_pct = "{}{}{}".format(sign, str(pct), "%")
print(output_format.format(str(case), str(before_data), str(after_data), signed_pct))
def main(): def main():
...@@ -93,9 +96,11 @@ def main(): ...@@ -93,9 +96,11 @@ def main():
parser.add_argument('-r', '--range', type=str, help='allowed fluctuation range') parser.add_argument('-r', '--range', type=str, help='allowed fluctuation range')
args = parser.parse_args() args = parser.parse_args()
read_file(args.before, 1)
read_file(args.after, 0) benchmark_data_parser = BenchmarkDataParser()
out_results(args) benchmark_data_parser.read_file(args.before, 1)
benchmark_data_parser.read_file(args.after, 0)
benchmark_data_parser.out_results(args)
if __name__ == '__main__': if __name__ == '__main__':
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册