1*1b3f573fSAndroid Build Coastguard Worker# This import depends on the automake rule protoc_middleman, please make sure 2*1b3f573fSAndroid Build Coastguard Worker# protoc_middleman has been built before run this file. 3*1b3f573fSAndroid Build Coastguard Workerimport argparse 4*1b3f573fSAndroid Build Coastguard Workerimport json 5*1b3f573fSAndroid Build Coastguard Workerimport re 6*1b3f573fSAndroid Build Coastguard Workerimport os.path 7*1b3f573fSAndroid Build Coastguard Worker# BEGIN OPENSOURCE 8*1b3f573fSAndroid Build Coastguard Workerimport sys 9*1b3f573fSAndroid Build Coastguard Workersys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir)) 10*1b3f573fSAndroid Build Coastguard Worker# END OPENSOURCE 11*1b3f573fSAndroid Build Coastguard Workerimport tmp.benchmarks_pb2 as benchmarks_pb2 12*1b3f573fSAndroid Build Coastguard Worker 13*1b3f573fSAndroid Build Coastguard Worker__file_size_map = {} 14*1b3f573fSAndroid Build Coastguard Worker 15*1b3f573fSAndroid Build Coastguard Workerdef __get_data_size(filename): 16*1b3f573fSAndroid Build Coastguard Worker if filename[0] != '/': 17*1b3f573fSAndroid Build Coastguard Worker filename = os.path.dirname(os.path.abspath(__file__)) + "/../" + filename 18*1b3f573fSAndroid Build Coastguard Worker if filename in __file_size_map: 19*1b3f573fSAndroid Build Coastguard Worker return __file_size_map[filename] 20*1b3f573fSAndroid Build Coastguard Worker benchmark_dataset = benchmarks_pb2.BenchmarkDataset() 21*1b3f573fSAndroid Build Coastguard Worker benchmark_dataset.ParseFromString( 22*1b3f573fSAndroid Build Coastguard Worker open(filename, "rb").read()) 23*1b3f573fSAndroid Build Coastguard Worker size = 0 24*1b3f573fSAndroid Build Coastguard Worker count = 0 25*1b3f573fSAndroid Build Coastguard Worker for payload in benchmark_dataset.payload: 26*1b3f573fSAndroid Build Coastguard Worker size += len(payload) 27*1b3f573fSAndroid Build Coastguard Worker count += 1 28*1b3f573fSAndroid Build Coastguard Worker __file_size_map[filename] = (size, 1.0 * size / count) 29*1b3f573fSAndroid Build Coastguard Worker return size, 1.0 * size / count 30*1b3f573fSAndroid Build Coastguard Worker 31*1b3f573fSAndroid Build Coastguard Worker 32*1b3f573fSAndroid Build Coastguard Workerdef __extract_file_name(file_name): 33*1b3f573fSAndroid Build Coastguard Worker name_list = re.split(r"[/\.]", file_name) 34*1b3f573fSAndroid Build Coastguard Worker short_file_name = "" 35*1b3f573fSAndroid Build Coastguard Worker for name in name_list: 36*1b3f573fSAndroid Build Coastguard Worker if name[:14] == "google_message": 37*1b3f573fSAndroid Build Coastguard Worker short_file_name = name 38*1b3f573fSAndroid Build Coastguard Worker return short_file_name 39*1b3f573fSAndroid Build Coastguard Worker 40*1b3f573fSAndroid Build Coastguard Worker 41*1b3f573fSAndroid Build Coastguard Worker__results = [] 42*1b3f573fSAndroid Build Coastguard Worker 43*1b3f573fSAndroid Build Coastguard Worker 44*1b3f573fSAndroid Build Coastguard Worker# CPP results example: 45*1b3f573fSAndroid Build Coastguard Worker# [ 46*1b3f573fSAndroid Build Coastguard Worker# "benchmarks": [ 47*1b3f573fSAndroid Build Coastguard Worker# { 48*1b3f573fSAndroid Build Coastguard Worker# "bytes_per_second": int, 49*1b3f573fSAndroid Build Coastguard Worker# "cpu_time_ns": double, 50*1b3f573fSAndroid Build Coastguard Worker# "iterations": int, 51*1b3f573fSAndroid Build Coastguard Worker# "name: string, 52*1b3f573fSAndroid Build Coastguard Worker# "real_time_ns: double, 53*1b3f573fSAndroid Build Coastguard Worker# ... 54*1b3f573fSAndroid Build Coastguard Worker# }, 55*1b3f573fSAndroid Build Coastguard Worker# ... 56*1b3f573fSAndroid Build Coastguard Worker# ], 57*1b3f573fSAndroid Build Coastguard Worker# ... 58*1b3f573fSAndroid Build Coastguard Worker# ] 59*1b3f573fSAndroid Build Coastguard Workerdef __parse_cpp_result(filename): 60*1b3f573fSAndroid Build Coastguard Worker if filename == "": 61*1b3f573fSAndroid Build Coastguard Worker return 62*1b3f573fSAndroid Build Coastguard Worker if filename[0] != '/': 63*1b3f573fSAndroid Build Coastguard Worker filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename 64*1b3f573fSAndroid Build Coastguard Worker with open(filename, encoding="utf-8") as f: 65*1b3f573fSAndroid Build Coastguard Worker results = json.loads(f.read()) 66*1b3f573fSAndroid Build Coastguard Worker for benchmark in results["benchmarks"]: 67*1b3f573fSAndroid Build Coastguard Worker data_filename = "".join( 68*1b3f573fSAndroid Build Coastguard Worker re.split("(_parse_|_serialize)", benchmark["name"])[0]) 69*1b3f573fSAndroid Build Coastguard Worker behavior = benchmark["name"][len(data_filename) + 1:] 70*1b3f573fSAndroid Build Coastguard Worker if data_filename[:2] == "BM": 71*1b3f573fSAndroid Build Coastguard Worker data_filename = data_filename[3:] 72*1b3f573fSAndroid Build Coastguard Worker __results.append({ 73*1b3f573fSAndroid Build Coastguard Worker "language": "cpp", 74*1b3f573fSAndroid Build Coastguard Worker "dataFilename": data_filename, 75*1b3f573fSAndroid Build Coastguard Worker "behavior": behavior, 76*1b3f573fSAndroid Build Coastguard Worker "throughput": benchmark["bytes_per_second"] / 2.0 ** 20 77*1b3f573fSAndroid Build Coastguard Worker }) 78*1b3f573fSAndroid Build Coastguard Worker 79*1b3f573fSAndroid Build Coastguard Worker 80*1b3f573fSAndroid Build Coastguard Worker# Synthetic benchmark results example: 81*1b3f573fSAndroid Build Coastguard Worker# [ 82*1b3f573fSAndroid Build Coastguard Worker# "benchmarks": [ 83*1b3f573fSAndroid Build Coastguard Worker# { 84*1b3f573fSAndroid Build Coastguard Worker# "cpu_time_ns": double, 85*1b3f573fSAndroid Build Coastguard Worker# "iterations": int, 86*1b3f573fSAndroid Build Coastguard Worker# "name: string, 87*1b3f573fSAndroid Build Coastguard Worker# "real_time_ns: double, 88*1b3f573fSAndroid Build Coastguard Worker# ... 89*1b3f573fSAndroid Build Coastguard Worker# }, 90*1b3f573fSAndroid Build Coastguard Worker# ... 91*1b3f573fSAndroid Build Coastguard Worker# ], 92*1b3f573fSAndroid Build Coastguard Worker# ... 93*1b3f573fSAndroid Build Coastguard Worker# ] 94*1b3f573fSAndroid Build Coastguard Workerdef __parse_synthetic_result(filename): 95*1b3f573fSAndroid Build Coastguard Worker if filename == "": 96*1b3f573fSAndroid Build Coastguard Worker return 97*1b3f573fSAndroid Build Coastguard Worker if filename[0] != "/": 98*1b3f573fSAndroid Build Coastguard Worker filename = os.path.dirname(os.path.abspath(__file__)) + "/" + filename 99*1b3f573fSAndroid Build Coastguard Worker with open(filename, encoding="utf-8") as f: 100*1b3f573fSAndroid Build Coastguard Worker results = json.loads(f.read()) 101*1b3f573fSAndroid Build Coastguard Worker for benchmark in results["benchmarks"]: 102*1b3f573fSAndroid Build Coastguard Worker __results.append({ 103*1b3f573fSAndroid Build Coastguard Worker "language": "cpp", 104*1b3f573fSAndroid Build Coastguard Worker "dataFilename": "", 105*1b3f573fSAndroid Build Coastguard Worker "behavior": "synthetic", 106*1b3f573fSAndroid Build Coastguard Worker "throughput": 10.0**9 / benchmark["cpu_time_ns"] 107*1b3f573fSAndroid Build Coastguard Worker }) 108*1b3f573fSAndroid Build Coastguard Worker 109*1b3f573fSAndroid Build Coastguard Worker 110*1b3f573fSAndroid Build Coastguard Worker# Python results example: 111*1b3f573fSAndroid Build Coastguard Worker# [ 112*1b3f573fSAndroid Build Coastguard Worker# [ 113*1b3f573fSAndroid Build Coastguard Worker# { 114*1b3f573fSAndroid Build Coastguard Worker# "filename": string, 115*1b3f573fSAndroid Build Coastguard Worker# "benchmarks": { 116*1b3f573fSAndroid Build Coastguard Worker# behavior: results, 117*1b3f573fSAndroid Build Coastguard Worker# ... 118*1b3f573fSAndroid Build Coastguard Worker# }, 119*1b3f573fSAndroid Build Coastguard Worker# }, 120*1b3f573fSAndroid Build Coastguard Worker# ... 121*1b3f573fSAndroid Build Coastguard Worker# ], #pure-python 122*1b3f573fSAndroid Build Coastguard Worker# ... 123*1b3f573fSAndroid Build Coastguard Worker# ] 124*1b3f573fSAndroid Build Coastguard Workerdef __parse_python_result(filename): 125*1b3f573fSAndroid Build Coastguard Worker if filename == "": 126*1b3f573fSAndroid Build Coastguard Worker return 127*1b3f573fSAndroid Build Coastguard Worker if filename[0] != '/': 128*1b3f573fSAndroid Build Coastguard Worker filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename 129*1b3f573fSAndroid Build Coastguard Worker with open(filename, encoding="utf-8") as f: 130*1b3f573fSAndroid Build Coastguard Worker results_list = json.loads(f.read()) 131*1b3f573fSAndroid Build Coastguard Worker for results in results_list: 132*1b3f573fSAndroid Build Coastguard Worker for result in results: 133*1b3f573fSAndroid Build Coastguard Worker _, avg_size = __get_data_size(result["filename"]) 134*1b3f573fSAndroid Build Coastguard Worker for behavior in result["benchmarks"]: 135*1b3f573fSAndroid Build Coastguard Worker __results.append({ 136*1b3f573fSAndroid Build Coastguard Worker "language": "python", 137*1b3f573fSAndroid Build Coastguard Worker "dataFilename": __extract_file_name(result["filename"]), 138*1b3f573fSAndroid Build Coastguard Worker "behavior": behavior, 139*1b3f573fSAndroid Build Coastguard Worker "throughput": result["benchmarks"][behavior] 140*1b3f573fSAndroid Build Coastguard Worker }) 141*1b3f573fSAndroid Build Coastguard Worker 142*1b3f573fSAndroid Build Coastguard Worker 143*1b3f573fSAndroid Build Coastguard Worker# Java results example: 144*1b3f573fSAndroid Build Coastguard Worker# [ 145*1b3f573fSAndroid Build Coastguard Worker# { 146*1b3f573fSAndroid Build Coastguard Worker# "id": string, 147*1b3f573fSAndroid Build Coastguard Worker# "instrumentSpec": {...}, 148*1b3f573fSAndroid Build Coastguard Worker# "measurements": [ 149*1b3f573fSAndroid Build Coastguard Worker# { 150*1b3f573fSAndroid Build Coastguard Worker# "weight": float, 151*1b3f573fSAndroid Build Coastguard Worker# "value": { 152*1b3f573fSAndroid Build Coastguard Worker# "magnitude": float, 153*1b3f573fSAndroid Build Coastguard Worker# "unit": string 154*1b3f573fSAndroid Build Coastguard Worker# }, 155*1b3f573fSAndroid Build Coastguard Worker# ... 156*1b3f573fSAndroid Build Coastguard Worker# }, 157*1b3f573fSAndroid Build Coastguard Worker# ... 158*1b3f573fSAndroid Build Coastguard Worker# ], 159*1b3f573fSAndroid Build Coastguard Worker# "run": {...}, 160*1b3f573fSAndroid Build Coastguard Worker# "scenario": { 161*1b3f573fSAndroid Build Coastguard Worker# "benchmarkSpec": { 162*1b3f573fSAndroid Build Coastguard Worker# "methodName": string, 163*1b3f573fSAndroid Build Coastguard Worker# "parameters": { 164*1b3f573fSAndroid Build Coastguard Worker# defined parameters in the benchmark: parameters value 165*1b3f573fSAndroid Build Coastguard Worker# }, 166*1b3f573fSAndroid Build Coastguard Worker# ... 167*1b3f573fSAndroid Build Coastguard Worker# }, 168*1b3f573fSAndroid Build Coastguard Worker# ... 169*1b3f573fSAndroid Build Coastguard Worker# } 170*1b3f573fSAndroid Build Coastguard Worker# 171*1b3f573fSAndroid Build Coastguard Worker# }, 172*1b3f573fSAndroid Build Coastguard Worker# ... 173*1b3f573fSAndroid Build Coastguard Worker# ] 174*1b3f573fSAndroid Build Coastguard Workerdef __parse_java_result(filename): 175*1b3f573fSAndroid Build Coastguard Worker if filename == "": 176*1b3f573fSAndroid Build Coastguard Worker return 177*1b3f573fSAndroid Build Coastguard Worker if filename[0] != '/': 178*1b3f573fSAndroid Build Coastguard Worker filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename 179*1b3f573fSAndroid Build Coastguard Worker with open(filename, encoding="utf-8") as f: 180*1b3f573fSAndroid Build Coastguard Worker results = json.loads(f.read()) 181*1b3f573fSAndroid Build Coastguard Worker for result in results: 182*1b3f573fSAndroid Build Coastguard Worker total_weight = 0 183*1b3f573fSAndroid Build Coastguard Worker total_value = 0 184*1b3f573fSAndroid Build Coastguard Worker for measurement in result["measurements"]: 185*1b3f573fSAndroid Build Coastguard Worker total_weight += measurement["weight"] 186*1b3f573fSAndroid Build Coastguard Worker total_value += measurement["value"]["magnitude"] 187*1b3f573fSAndroid Build Coastguard Worker avg_time = total_value * 1.0 / total_weight 188*1b3f573fSAndroid Build Coastguard Worker total_size, _ = __get_data_size( 189*1b3f573fSAndroid Build Coastguard Worker result["scenario"]["benchmarkSpec"]["parameters"]["dataFile"]) 190*1b3f573fSAndroid Build Coastguard Worker __results.append({ 191*1b3f573fSAndroid Build Coastguard Worker "language": "java", 192*1b3f573fSAndroid Build Coastguard Worker "throughput": total_size / avg_time * 1e9 / 2 ** 20, 193*1b3f573fSAndroid Build Coastguard Worker "behavior": result["scenario"]["benchmarkSpec"]["methodName"], 194*1b3f573fSAndroid Build Coastguard Worker "dataFilename": __extract_file_name( 195*1b3f573fSAndroid Build Coastguard Worker result["scenario"]["benchmarkSpec"]["parameters"]["dataFile"]) 196*1b3f573fSAndroid Build Coastguard Worker }) 197*1b3f573fSAndroid Build Coastguard Worker 198*1b3f573fSAndroid Build Coastguard Worker 199*1b3f573fSAndroid Build Coastguard Worker# Go benchmark results: 200*1b3f573fSAndroid Build Coastguard Worker# 201*1b3f573fSAndroid Build Coastguard Worker# goos: linux 202*1b3f573fSAndroid Build Coastguard Worker# goarch: amd64 203*1b3f573fSAndroid Build Coastguard Worker# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Unmarshal-12 3000 705784 ns/op 204*1b3f573fSAndroid Build Coastguard Worker# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Marshal-12 2000 634648 ns/op 205*1b3f573fSAndroid Build Coastguard Worker# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Size-12 5000 244174 ns/op 206*1b3f573fSAndroid Build Coastguard Worker# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Clone-12 300 4120954 ns/op 207*1b3f573fSAndroid Build Coastguard Worker# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Merge-12 300 4108632 ns/op 208*1b3f573fSAndroid Build Coastguard Worker# PASS 209*1b3f573fSAndroid Build Coastguard Worker# ok _/usr/local/google/home/yilunchong/mygit/protobuf/benchmarks 124.173s 210*1b3f573fSAndroid Build Coastguard Workerdef __parse_go_result(filename): 211*1b3f573fSAndroid Build Coastguard Worker if filename == "": 212*1b3f573fSAndroid Build Coastguard Worker return 213*1b3f573fSAndroid Build Coastguard Worker if filename[0] != '/': 214*1b3f573fSAndroid Build Coastguard Worker filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename 215*1b3f573fSAndroid Build Coastguard Worker with open(filename, encoding="utf-8") as f: 216*1b3f573fSAndroid Build Coastguard Worker for line in f: 217*1b3f573fSAndroid Build Coastguard Worker result_list = re.split(r"[\ \t]+", line) 218*1b3f573fSAndroid Build Coastguard Worker if result_list[0][:9] != "Benchmark": 219*1b3f573fSAndroid Build Coastguard Worker continue 220*1b3f573fSAndroid Build Coastguard Worker first_slash_index = result_list[0].find('/') 221*1b3f573fSAndroid Build Coastguard Worker last_slash_index = result_list[0].rfind('/') 222*1b3f573fSAndroid Build Coastguard Worker full_filename = result_list[0][first_slash_index+1:last_slash_index] 223*1b3f573fSAndroid Build Coastguard Worker total_bytes, _ = __get_data_size(full_filename) 224*1b3f573fSAndroid Build Coastguard Worker behavior_with_suffix = result_list[0][last_slash_index+1:] 225*1b3f573fSAndroid Build Coastguard Worker last_dash = behavior_with_suffix.rfind("-") 226*1b3f573fSAndroid Build Coastguard Worker if last_dash == -1: 227*1b3f573fSAndroid Build Coastguard Worker behavior = behavior_with_suffix 228*1b3f573fSAndroid Build Coastguard Worker else: 229*1b3f573fSAndroid Build Coastguard Worker behavior = behavior_with_suffix[:last_dash] 230*1b3f573fSAndroid Build Coastguard Worker __results.append({ 231*1b3f573fSAndroid Build Coastguard Worker "dataFilename": __extract_file_name(full_filename), 232*1b3f573fSAndroid Build Coastguard Worker "throughput": total_bytes / float(result_list[2]) * 1e9 / 2 ** 20, 233*1b3f573fSAndroid Build Coastguard Worker "behavior": behavior, 234*1b3f573fSAndroid Build Coastguard Worker "language": "go" 235*1b3f573fSAndroid Build Coastguard Worker }) 236*1b3f573fSAndroid Build Coastguard Worker 237*1b3f573fSAndroid Build Coastguard Worker 238*1b3f573fSAndroid Build Coastguard Worker# Self built json results example: 239*1b3f573fSAndroid Build Coastguard Worker# 240*1b3f573fSAndroid Build Coastguard Worker# [ 241*1b3f573fSAndroid Build Coastguard Worker# { 242*1b3f573fSAndroid Build Coastguard Worker# "filename": string, 243*1b3f573fSAndroid Build Coastguard Worker# "benchmarks": { 244*1b3f573fSAndroid Build Coastguard Worker# behavior: results, 245*1b3f573fSAndroid Build Coastguard Worker# ... 246*1b3f573fSAndroid Build Coastguard Worker# }, 247*1b3f573fSAndroid Build Coastguard Worker# }, 248*1b3f573fSAndroid Build Coastguard Worker# ... 249*1b3f573fSAndroid Build Coastguard Worker# ] 250*1b3f573fSAndroid Build Coastguard Workerdef __parse_custom_result(filename, language): 251*1b3f573fSAndroid Build Coastguard Worker if filename == "": 252*1b3f573fSAndroid Build Coastguard Worker return 253*1b3f573fSAndroid Build Coastguard Worker if filename[0] != '/': 254*1b3f573fSAndroid Build Coastguard Worker filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename 255*1b3f573fSAndroid Build Coastguard Worker with open(filename, encoding="utf-8") as f: 256*1b3f573fSAndroid Build Coastguard Worker results = json.loads(f.read()) 257*1b3f573fSAndroid Build Coastguard Worker for result in results: 258*1b3f573fSAndroid Build Coastguard Worker _, avg_size = __get_data_size(result["filename"]) 259*1b3f573fSAndroid Build Coastguard Worker for behavior in result["benchmarks"]: 260*1b3f573fSAndroid Build Coastguard Worker __results.append({ 261*1b3f573fSAndroid Build Coastguard Worker "language": language, 262*1b3f573fSAndroid Build Coastguard Worker "dataFilename": __extract_file_name(result["filename"]), 263*1b3f573fSAndroid Build Coastguard Worker "behavior": behavior, 264*1b3f573fSAndroid Build Coastguard Worker "throughput": result["benchmarks"][behavior] 265*1b3f573fSAndroid Build Coastguard Worker }) 266*1b3f573fSAndroid Build Coastguard Worker 267*1b3f573fSAndroid Build Coastguard Worker 268*1b3f573fSAndroid Build Coastguard Workerdef __parse_js_result(filename, language): 269*1b3f573fSAndroid Build Coastguard Worker return __parse_custom_result(filename, language) 270*1b3f573fSAndroid Build Coastguard Worker 271*1b3f573fSAndroid Build Coastguard Workerdef __parse_php_result(filename, language): 272*1b3f573fSAndroid Build Coastguard Worker return __parse_custom_result(filename, language) 273*1b3f573fSAndroid Build Coastguard Worker 274*1b3f573fSAndroid Build Coastguard Worker 275*1b3f573fSAndroid Build Coastguard Workerdef get_result_from_file(cpp_file="", 276*1b3f573fSAndroid Build Coastguard Worker java_file="", 277*1b3f573fSAndroid Build Coastguard Worker python_file="", 278*1b3f573fSAndroid Build Coastguard Worker go_file="", 279*1b3f573fSAndroid Build Coastguard Worker synthetic_file="", 280*1b3f573fSAndroid Build Coastguard Worker node_file="", 281*1b3f573fSAndroid Build Coastguard Worker php_c_file="", 282*1b3f573fSAndroid Build Coastguard Worker php_file=""): 283*1b3f573fSAndroid Build Coastguard Worker results = {} 284*1b3f573fSAndroid Build Coastguard Worker if cpp_file != "": 285*1b3f573fSAndroid Build Coastguard Worker __parse_cpp_result(cpp_file) 286*1b3f573fSAndroid Build Coastguard Worker if java_file != "": 287*1b3f573fSAndroid Build Coastguard Worker __parse_java_result(java_file) 288*1b3f573fSAndroid Build Coastguard Worker if python_file != "": 289*1b3f573fSAndroid Build Coastguard Worker __parse_python_result(python_file) 290*1b3f573fSAndroid Build Coastguard Worker if go_file != "": 291*1b3f573fSAndroid Build Coastguard Worker __parse_go_result(go_file) 292*1b3f573fSAndroid Build Coastguard Worker if synthetic_file != "": 293*1b3f573fSAndroid Build Coastguard Worker __parse_synthetic_result(synthetic_file) 294*1b3f573fSAndroid Build Coastguard Worker if node_file != "": 295*1b3f573fSAndroid Build Coastguard Worker __parse_js_result(node_file, "node") 296*1b3f573fSAndroid Build Coastguard Worker if php_file != "": 297*1b3f573fSAndroid Build Coastguard Worker __parse_php_result(php_file, "php") 298*1b3f573fSAndroid Build Coastguard Worker if php_c_file != "": 299*1b3f573fSAndroid Build Coastguard Worker __parse_php_result(php_c_file, "php") 300*1b3f573fSAndroid Build Coastguard Worker 301*1b3f573fSAndroid Build Coastguard Worker return __results 302*1b3f573fSAndroid Build Coastguard Worker 303*1b3f573fSAndroid Build Coastguard Worker 304*1b3f573fSAndroid Build Coastguard Workerif __name__ == "__main__": 305*1b3f573fSAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 306*1b3f573fSAndroid Build Coastguard Worker parser.add_argument( 307*1b3f573fSAndroid Build Coastguard Worker "-cpp", 308*1b3f573fSAndroid Build Coastguard Worker "--cpp_input_file", 309*1b3f573fSAndroid Build Coastguard Worker help="The CPP benchmark result file's name", 310*1b3f573fSAndroid Build Coastguard Worker default="") 311*1b3f573fSAndroid Build Coastguard Worker parser.add_argument( 312*1b3f573fSAndroid Build Coastguard Worker "-java", 313*1b3f573fSAndroid Build Coastguard Worker "--java_input_file", 314*1b3f573fSAndroid Build Coastguard Worker help="The Java benchmark result file's name", 315*1b3f573fSAndroid Build Coastguard Worker default="") 316*1b3f573fSAndroid Build Coastguard Worker parser.add_argument( 317*1b3f573fSAndroid Build Coastguard Worker "-python", 318*1b3f573fSAndroid Build Coastguard Worker "--python_input_file", 319*1b3f573fSAndroid Build Coastguard Worker help="The Python benchmark result file's name", 320*1b3f573fSAndroid Build Coastguard Worker default="") 321*1b3f573fSAndroid Build Coastguard Worker parser.add_argument( 322*1b3f573fSAndroid Build Coastguard Worker "-go", 323*1b3f573fSAndroid Build Coastguard Worker "--go_input_file", 324*1b3f573fSAndroid Build Coastguard Worker help="The golang benchmark result file's name", 325*1b3f573fSAndroid Build Coastguard Worker default="") 326*1b3f573fSAndroid Build Coastguard Worker parser.add_argument( 327*1b3f573fSAndroid Build Coastguard Worker "-node", 328*1b3f573fSAndroid Build Coastguard Worker "--node_input_file", 329*1b3f573fSAndroid Build Coastguard Worker help="The node.js benchmark result file's name", 330*1b3f573fSAndroid Build Coastguard Worker default="") 331*1b3f573fSAndroid Build Coastguard Worker parser.add_argument( 332*1b3f573fSAndroid Build Coastguard Worker "-php", 333*1b3f573fSAndroid Build Coastguard Worker "--php_input_file", 334*1b3f573fSAndroid Build Coastguard Worker help="The pure php benchmark result file's name", 335*1b3f573fSAndroid Build Coastguard Worker default="") 336*1b3f573fSAndroid Build Coastguard Worker parser.add_argument( 337*1b3f573fSAndroid Build Coastguard Worker "-php_c", 338*1b3f573fSAndroid Build Coastguard Worker "--php_c_input_file", 339*1b3f573fSAndroid Build Coastguard Worker help="The php with c ext benchmark result file's name", 340*1b3f573fSAndroid Build Coastguard Worker default="") 341*1b3f573fSAndroid Build Coastguard Worker args = parser.parse_args() 342*1b3f573fSAndroid Build Coastguard Worker 343*1b3f573fSAndroid Build Coastguard Worker results = get_result_from_file( 344*1b3f573fSAndroid Build Coastguard Worker cpp_file=args.cpp_input_file, 345*1b3f573fSAndroid Build Coastguard Worker java_file=args.java_input_file, 346*1b3f573fSAndroid Build Coastguard Worker python_file=args.python_input_file, 347*1b3f573fSAndroid Build Coastguard Worker go_file=args.go_input_file, 348*1b3f573fSAndroid Build Coastguard Worker node_file=args.node_input_file, 349*1b3f573fSAndroid Build Coastguard Worker php_file=args.php_input_file, 350*1b3f573fSAndroid Build Coastguard Worker php_c_file=args.php_c_input_file, 351*1b3f573fSAndroid Build Coastguard Worker ) 352*1b3f573fSAndroid Build Coastguard Worker print(json.dumps(results, indent=2)) 353