Skip to content

Commit 9375162

Browse files
authored
Fix event skipping in the timeline viewer (#116)
Ensure that we use the physical stream name rather than the Perfetto interned ID when doing stream manipulation, as the Perfetto interned ID may not be unique.
1 parent e4a1008 commit 9375162

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

lglpy/timeline/data/processed_trace.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def __init__(
7777
# Common data we get from the layer metadata
7878
self.submit = None
7979
self.label_stack = None
80-
self.parsed_label_name = None
80+
self.parsed_label_name: Optional[str] = None
8181

8282
if metadata:
8383
self.submit = metadata.submit

lglpy/timeline/data/raw_trace.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,13 @@ def load_perfetto_from_file(
878878
# Sort events into time order
879879
trace_events.sort(key=lambda x: x.start_time)
880880

881+
# Replace all interned data cross-references to assign real stream
882+
# names before trying to use streams because we may get more than one
883+
# interned ID for the same physical stream and this will dedupe them
884+
for event in trace_events:
885+
config.replace_interned_stream(event)
886+
config.replace_interned_stage(event)
887+
881888
# Replace time so first event starts at time = 0 and that queued time
882889
# waiting for earlier work does not show as running
883890
streams = {}
@@ -893,18 +900,19 @@ def load_perfetto_from_file(
893900
# Later job in stream so remove any overlap with job N-1
894901
last_event = streams[event.stream][-1]
895902
last_event_end = last_event.start_time + last_event.duration
896-
streams[event.stream].append(event)
897903

898904
# Remove overlap if queued while last event still running
899905
if event.start_time <= last_event_end:
900906
time_diff = last_event_end - event.start_time + 1
901907
event.start_time += time_diff
902908
event.duration -= time_diff
903909

904-
# Replace all interned data cross-references
905-
for event in trace_events:
906-
config.replace_interned_stream(event)
907-
config.replace_interned_stage(event)
910+
# Ensure we don't have negative duration events
911+
if event.duration <= 0:
912+
event.duration = 1
913+
914+
# Add event to the stream after patching it
915+
streams[event.stream].append(event)
908916

909917
return (trace_events, start_time)
910918

0 commit comments

Comments
 (0)