X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=benchmark%2Fproto%2Fcompare_sizes.py;h=b8b79bb9461edef96012cbee7d202efba9856579;hb=8f87419564532b304dec7105afe005f85cdec0e1;hp=ce6b25b91d87a92f76094eee0cb58893a2926f8d;hpb=f85bc9eb9a932988bdab198f9da20c2fea55bac2;p=apps%2Fagl-service-can-low-level.git diff --git a/benchmark/proto/compare_sizes.py b/benchmark/proto/compare_sizes.py old mode 100644 new mode 100755 index ce6b25b9..b8b79bb9 --- a/benchmark/proto/compare_sizes.py +++ b/benchmark/proto/compare_sizes.py @@ -2,6 +2,7 @@ from __future__ import division import sys +import numbers import openxc_pb2 import json @@ -12,20 +13,53 @@ def sizeof_fmt(num): return "%3.1f%s" % (num, unit) num /= 1024.0 -total_json_size = 0 -total_binary_size = 0 +total_raw_json_size = 0 +total_raw_binary_size = 0 +total_translated_json_size = 0 +total_translated_binary_size = 0 -trace_file = sys.argv[1] -for line in open(trace_file): - raw_message = json.loads(line) - total_json_size += len(json.dumps(raw_message)) - binary_message = openxc_pb2.RawMessage() - binary_message.message_id = raw_message['id'] - binary_message.data = int(raw_message['data'], 0) - total_binary_size += len(binary_message.SerializeToString()) +for trace_file in sys.argv[1:]: + for line in open(trace_file): + try: + json_message = json.loads(line) + except ValueError: + continue -print("For the trace file %s..." % trace_file) + if 'id' and 'data' in json_message: + total_raw_json_size += len(line) + binary_message = openxc_pb2.RawMessage() + binary_message.message_id = json_message['id'] + binary_message.data = int(json_message['data'], 0) + total_raw_binary_size += len(binary_message.SerializeToString()) + else: + if isinstance(json_message['value'], bool): + binary_message = openxc_pb2.TranslatedBooleanMessage() + elif isinstance(json_message['value'], numbers.Number): + binary_message = openxc_pb2.TranslatedNumericMessage() + else: + binary_message = openxc_pb2.TranslatedStringMessage() + binary_message.name = json_message['name'] + binary_message.value = json_message['value'] + total_translated_json_size += len(line) + total_translated_binary_size += len(binary_message.SerializeToString()) + + +print("For the %d trace files given..." % len(sys.argv[1:])) +print("Total transferred raw JSON size is %s" % sizeof_fmt(total_raw_json_size)) +print("Total transferred raw binary size is %s" % sizeof_fmt(total_raw_binary_size)) +print("Total transferred translated JSON size is %s" % + sizeof_fmt(total_translated_json_size)) +print("Total transferred translated binary size is %s" % + sizeof_fmt(total_translated_binary_size)) + +total_json_size = total_raw_json_size + total_translated_json_size print("Total transferred JSON size is %s" % sizeof_fmt(total_json_size)) +total_binary_size = total_raw_binary_size + total_translated_binary_size print("Total transferred binary size is %s" % sizeof_fmt(total_binary_size)) + +print("Binary encoding is %f%% smaller than JSON for raw messages" % ( + 100 - (total_raw_binary_size / total_raw_json_size * 100))) +print("Binary encoding is %f%% smaller than JSON for translated messages" % ( + 100 - (total_translated_binary_size / total_translated_json_size * 100))) print("Binary encoding is %f%% smaller than JSON overall" % ( 100 - (total_binary_size / total_json_size * 100)))