aboutsummaryrefslogtreecommitdiff
path: root/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py')
-rw-r--r--catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py143
1 files changed, 126 insertions, 17 deletions
diff --git a/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py b/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py
index 2da179be..5be4a8e1 100644
--- a/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py
+++ b/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py
@@ -21,15 +21,32 @@ import wire_format
class TracePacket(object):
def __init__(self):
+ self.clock_snapshot = None
+ self.timestamp = None
+ self.timestamp_clock_id = None
self.interned_data = None
self.thread_descriptor = None
self.incremental_state_cleared = None
+ self.chrome_event = None
self.track_event = None
self.trusted_packet_sequence_id = None
self.chrome_benchmark_metadata = None
def encode(self):
parts = []
+ if self.chrome_event is not None:
+ tag = encoder.TagBytes(5, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.chrome_event.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+ if self.clock_snapshot is not None:
+ tag = encoder.TagBytes(6, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.clock_snapshot.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+ if self.timestamp is not None:
+ writer = encoder.UInt64Encoder(8, False, False)
+ writer(parts.append, self.timestamp)
if self.trusted_packet_sequence_id is not None:
writer = encoder.UInt32Encoder(10, False, False)
writer(parts.append, self.trusted_packet_sequence_id)
@@ -56,6 +73,9 @@ class TracePacket(object):
data = self.chrome_benchmark_metadata.encode()
length = encoder._VarintBytes(len(data))
parts += [tag, length, data]
+ if self.timestamp_clock_id is not None:
+ writer = encoder.UInt32Encoder(58, False, False)
+ writer(parts.append, self.timestamp_clock_id)
return b"".join(parts)
@@ -106,11 +126,9 @@ class ThreadDescriptor(object):
def __init__(self):
self.pid = None
self.tid = None
- self.reference_timestamp_us = None
def encode(self):
- if (self.pid is None or self.tid is None or
- self.reference_timestamp_us is None):
+ if (self.pid is None or self.tid is None):
raise RuntimeError("Missing mandatory fields.")
parts = []
@@ -118,35 +136,46 @@ class ThreadDescriptor(object):
writer(parts.append, self.pid)
writer = encoder.UInt32Encoder(2, False, False)
writer(parts.append, self.tid)
- writer = encoder.Int64Encoder(6, False, False)
- writer(parts.append, self.reference_timestamp_us)
+
+ return b"".join(parts)
+
+
+class ChromeEventBundle(object):
+ def __init__(self):
+ self.metadata = []
+
+ def encode(self):
+ parts = []
+ for item in self.metadata:
+ tag = encoder.TagBytes(2, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = item.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
return b"".join(parts)
class TrackEvent(object):
def __init__(self):
- self.timestamp_absolute_us = None
- self.timestamp_delta_us = None
self.legacy_event = None
self.category_iids = None
+ self.debug_annotations = []
def encode(self):
parts = []
- if self.timestamp_delta_us is not None:
- writer = encoder.Int64Encoder(1, False, False)
- writer(parts.append, self.timestamp_delta_us)
if self.category_iids is not None:
writer = encoder.UInt32Encoder(3, is_repeated=True, is_packed=False)
writer(parts.append, self.category_iids)
+ for annotation in self.debug_annotations:
+ tag = encoder.TagBytes(4, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = annotation.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
if self.legacy_event is not None:
tag = encoder.TagBytes(6, wire_format.WIRETYPE_LENGTH_DELIMITED)
data = self.legacy_event.encode()
length = encoder._VarintBytes(len(data))
parts += [tag, length, data]
- if self.timestamp_absolute_us is not None:
- writer = encoder.Int64Encoder(16, False, False)
- writer(parts.append, self.timestamp_absolute_us)
return b"".join(parts)
@@ -178,7 +207,6 @@ class ChromeBenchmarkMetadata(object):
self.story_tags = None
self.story_run_index = None
self.label = None
- self.had_failures = None
def encode(self):
parts = []
@@ -206,9 +234,6 @@ class ChromeBenchmarkMetadata(object):
if self.story_run_index is not None:
writer = encoder.Int32Encoder(8, False, False)
writer(parts.append, self.story_run_index)
- if self.had_failures is not None:
- writer = encoder.BoolEncoder(9, False, False)
- writer(parts.append, self.had_failures)
return b"".join(parts)
@@ -220,3 +245,87 @@ def write_trace_packet(output, trace_packet):
encoder._EncodeVarint(output.write, len(binary_data))
output.write(binary_data)
+
+class DebugAnnotation(object):
+ def __init__(self):
+ self.name = None
+ self.int_value = None
+ self.double_value = None
+ self.string_value = None
+
+ def encode(self):
+ if self.name is None:
+ raise RuntimeError("DebugAnnotation must have a name.")
+ if ((self.string_value is not None) +
+ (self.int_value is not None) +
+ (self.double_value is not None)) != 1:
+ raise RuntimeError("DebugAnnotation must have exactly one value.")
+
+ parts = []
+ writer = encoder.StringEncoder(10, False, False)
+ writer(parts.append, self.name)
+ if self.int_value is not None:
+ writer = encoder.Int64Encoder(4, False, False)
+ writer(parts.append, self.int_value)
+ if self.double_value is not None:
+ writer = encoder.DoubleEncoder(5, False, False)
+ writer(parts.append, self.double_value)
+ if self.string_value is not None:
+ writer = encoder.StringEncoder(6, False, False)
+ writer(parts.append, self.string_value)
+
+ return b"".join(parts)
+
+
+class ChromeMetadata(object):
+ def __init__(self):
+ self.name = None
+ self.string_value = None
+
+ def encode(self):
+ if self.name is None or self.string_value is None:
+ raise RuntimeError("ChromeMetadata must have a name and a value.")
+
+ parts = []
+ writer = encoder.StringEncoder(1, False, False)
+ writer(parts.append, self.name)
+ writer = encoder.StringEncoder(2, False, False)
+ writer(parts.append, self.string_value)
+
+ return b"".join(parts)
+
+
+class Clock(object):
+ def __init__(self):
+ self.clock_id = None
+ self.timestamp = None
+
+ def encode(self):
+ if self.clock_id is None or self.timestamp is None:
+ raise RuntimeError("Clock must have a clock_id and a timestamp.")
+
+ parts = []
+ writer = encoder.UInt32Encoder(1, False, False)
+ writer(parts.append, self.clock_id)
+ writer = encoder.UInt64Encoder(2, False, False)
+ writer(parts.append, self.timestamp)
+
+ return b"".join(parts)
+
+
+class ClockSnapshot(object):
+ def __init__(self):
+ self.clocks = []
+
+ def encode(self):
+ if len(self.clocks) < 2:
+ raise RuntimeError("ClockSnapshot must have at least two clocks.")
+
+ parts = []
+ for clock in self.clocks:
+ tag = encoder.TagBytes(1, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = clock.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+
+ return b"".join(parts)