3 from __future__ import division
11 for unit in ['bytes', 'KB', 'MB', 'GB', 'TB']:
13 return "%3.1f%s" % (num, unit)
16 total_raw_json_size = 0
17 total_raw_binary_size = 0
18 total_translated_json_size = 0
19 total_translated_binary_size = 0
21 for trace_file in sys.argv[1:]:
22 for line in open(trace_file):
24 json_message = json.loads(line)
28 if 'id' and 'data' in json_message:
29 total_raw_json_size += len(line)
30 binary_message = openxc_pb2.RawMessage()
31 binary_message.message_id = json_message['id']
32 binary_message.data = int(json_message['data'], 0)
33 total_raw_binary_size += len(binary_message.SerializeToString())
35 if isinstance(json_message['value'], bool):
36 binary_message = openxc_pb2.TranslatedBooleanMessage()
37 elif isinstance(json_message['value'], numbers.Number):
38 binary_message = openxc_pb2.TranslatedNumericMessage()
40 binary_message = openxc_pb2.TranslatedStringMessage()
41 binary_message.name = json_message['name']
42 binary_message.value = json_message['value']
43 total_translated_json_size += len(line)
44 total_translated_binary_size += len(binary_message.SerializeToString())
47 print("For the %d trace files given..." % len(sys.argv[1:]))
48 print("Total transferred raw JSON size is %s" % sizeof_fmt(total_raw_json_size))
49 print("Total transferred raw binary size is %s" % sizeof_fmt(total_raw_binary_size))
50 print("Total transferred translated JSON size is %s" %
51 sizeof_fmt(total_translated_json_size))
52 print("Total transferred translated binary size is %s" %
53 sizeof_fmt(total_translated_binary_size))
55 total_json_size = total_raw_json_size + total_translated_json_size
56 print("Total transferred JSON size is %s" % sizeof_fmt(total_json_size))
57 total_binary_size = total_raw_binary_size + total_translated_binary_size
58 print("Total transferred binary size is %s" % sizeof_fmt(total_binary_size))
60 print("Binary encoding is %f%% smaller than JSON for raw messages" % (
61 100 - (total_raw_binary_size / total_raw_json_size * 100)))
62 print("Binary encoding is %f%% smaller than JSON for translated messages" % (
63 100 - (total_translated_binary_size / total_translated_json_size * 100)))
64 print("Binary encoding is %f%% smaller than JSON overall" % (
65 100 - (total_binary_size / total_json_size * 100)))