tp: add script to serialize test python/textproto traces
This has been a recurring need when debugging python/textproto diff
tests.
Change-Id: Iba1ce444831a1f69ff7c90945077f4c5c22bb2ec
diff --git a/tools/diff_test_trace_processor.py b/tools/diff_test_trace_processor.py
index 9b98644..6012375 100755
--- a/tools/diff_test_trace_processor.py
+++ b/tools/diff_test_trace_processor.py
@@ -30,9 +30,10 @@
import tempfile
from itertools import chain
-from google.protobuf import descriptor, descriptor_pb2, message_factory
from google.protobuf import reflection, text_format
+from proto_utils import create_message_factory, serialize_textproto_trace, serialize_python_trace
+
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -56,44 +57,12 @@
self.real_time_ns = int(real_time_ns_str)
-def create_message_factory(descriptor_file_path, proto_type):
- with open(descriptor_file_path, 'rb') as descriptor_file:
- descriptor_content = descriptor_file.read()
-
- file_desc_set_pb2 = descriptor_pb2.FileDescriptorSet()
- file_desc_set_pb2.MergeFromString(descriptor_content)
-
- desc_by_path = {}
- for f_desc_pb2 in file_desc_set_pb2.file:
- f_desc_pb2_encode = f_desc_pb2.SerializeToString()
- f_desc = descriptor.FileDescriptor(
- name=f_desc_pb2.name,
- package=f_desc_pb2.package,
- serialized_pb=f_desc_pb2_encode)
-
- for desc in f_desc.message_types_by_name.values():
- desc_by_path[desc.full_name] = desc
-
- return message_factory.MessageFactory().GetPrototype(desc_by_path[proto_type])
-
-
-def create_trace_message_factory(trace_descriptor_path):
- return create_message_factory(trace_descriptor_path, 'perfetto.protos.Trace')
-
-
def create_metrics_message_factory(metrics_descriptor_path):
return create_message_factory(metrics_descriptor_path,
'perfetto.protos.TraceMetrics')
-def serialize_text_proto_to_file(proto_descriptor_path, text_proto_path,
- output_file):
- trace_message_factory = create_trace_message_factory(proto_descriptor_path)
- proto = trace_message_factory()
- with open(text_proto_path, 'r') as text_proto_file:
- text_format.Merge(text_proto_file.read(), proto)
- output_file.write(proto.SerializeToString())
- output_file.flush()
+
def write_diff(expected, actual):
@@ -197,13 +166,12 @@
if trace_path.endswith('.py'):
gen_trace_file = tempfile.NamedTemporaryFile(delete=False)
- python_cmd = ['python', trace_path, trace_descriptor_path]
- subprocess.check_call(python_cmd, stdout=gen_trace_file)
+ serialize_python_trace(trace_descriptor_path, trace_path, gen_trace_file)
gen_trace_path = os.path.realpath(gen_trace_file.name)
elif trace_path.endswith('.textproto'):
gen_trace_file = tempfile.NamedTemporaryFile(delete=False)
- serialize_text_proto_to_file(trace_descriptor_path, trace_path,
- gen_trace_file)
+ serialize_textproto_trace(trace_descriptor_path, trace_path,
+ gen_trace_file)
gen_trace_path = os.path.realpath(gen_trace_file.name)
else:
gen_trace_file = None