| # Sequence 1 defaults to track for "t1". |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 0 |
| incremental_state_cleared: true |
| first_packet_on_sequence: true |
| track_descriptor { |
| uuid: 1 |
| parent_uuid: 10 |
| thread { |
| pid: 5 |
| tid: 1 |
| thread_name: "t1" |
| } |
| } |
| trace_packet_defaults { |
| track_event_defaults { |
| track_uuid: 1 |
| } |
| } |
| } |
| # Sequence 2 defaults to track for "t2". |
| packet { |
| trusted_packet_sequence_id: 2 |
| timestamp: 0 |
| incremental_state_cleared: true |
| first_packet_on_sequence: true |
| track_descriptor { |
| uuid: 2 |
| parent_uuid: 10 |
| thread { |
| pid: 5 |
| tid: 2 |
| thread_name: "t2" |
| } |
| } |
| trace_packet_defaults { |
| track_event_defaults { |
| track_uuid: 2 |
| } |
| } |
| } |
| # Both thread tracks are nested underneath this process track. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 0 |
| track_descriptor { |
| uuid: 10 |
| process { |
| pid: 5 |
| process_name: "p1" |
| } |
| chrome_process { |
| host_app_package_name: "host_app" |
| } |
| } |
| } |
| # And we have an async track underneath the process too. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 0 |
| track_descriptor { |
| uuid: 11 |
| parent_uuid: 10 |
| name: "async" |
| } |
| } |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 100 |
| track_descriptor { |
| uuid: 12 |
| parent_uuid: 10 |
| name: "async2" |
| } |
| } |
| packet { |
| trusted_packet_sequence_id: 2 |
| timestamp: 200 |
| track_descriptor { |
| uuid: 12 |
| parent_uuid: 10 |
| name: "async2" |
| } |
| } |
| |
| # Threads also can have child async tracks. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 200 |
| track_descriptor { |
| uuid: 14 |
| parent_uuid: 2 |
| name: "async3" |
| } |
| } |
| |
| # Should appear on default track "t1". |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 1000 |
| track_event { |
| categories: "cat" |
| name: "event1_on_t1" |
| type: 3 |
| } |
| } |
| # Should appear on default track "t2". |
| packet { |
| trusted_packet_sequence_id: 2 |
| timestamp: 2000 |
| track_event { |
| categories: "cat" |
| name: "event1_on_t2" |
| type: 3 |
| } |
| } |
| # Should appear on overridden track "t2". |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 3000 |
| track_event { |
| track_uuid: 2 |
| categories: "cat" |
| name: "event2_on_t2" |
| type: 3 |
| } |
| } |
| # Should appear on process track. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 4000 |
| track_event { |
| track_uuid: 10 |
| categories: "cat" |
| name: "event1_on_p1" |
| type: 3 |
| } |
| } |
| # Should appear on async track. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 5000 |
| track_event { |
| track_uuid: 11 |
| categories: "cat" |
| name: "event1_on_async" |
| type: 3 |
| } |
| } |
| # Event for the "async2" track starting on one thread and ending on another. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 5100 |
| track_event { |
| track_uuid: 12 |
| categories: "cat" |
| name: "event1_on_async2" |
| type: 1 |
| } |
| } |
| packet { |
| trusted_packet_sequence_id: 2 |
| timestamp: 5200 |
| track_event { |
| track_uuid: 12 |
| categories: "cat" |
| name: "event1_on_async2" |
| type: 2 |
| } |
| } |
| |
| # If we later see another track descriptor for tid 1, but with a different uuid, |
| # we should detect tid reuse and start a new thread. |
| packet { |
| trusted_packet_sequence_id: 3 |
| timestamp: 10000 |
| incremental_state_cleared: true |
| first_packet_on_sequence: true |
| track_descriptor { |
| uuid: 3 |
| parent_uuid: 10 |
| thread { |
| pid: 5 |
| tid: 1 |
| thread_name: "t3" |
| } |
| } |
| } |
| # Should appear on t3. |
| packet { |
| trusted_packet_sequence_id: 3 |
| timestamp: 11000 |
| track_event { |
| track_uuid: 3 |
| categories: "cat" |
| name: "event1_on_t3" |
| type: 3 |
| } |
| } |
| |
| # If we later see another track descriptor for pid 5, but with a different uuid, |
| # we should detect pid reuse and start a new process. |
| packet { |
| trusted_packet_sequence_id: 4 |
| timestamp: 20000 |
| incremental_state_cleared: true |
| track_descriptor { |
| uuid: 20 |
| process { |
| pid: 5 |
| process_name: "p2" |
| } |
| } |
| } |
| # Should appear on p2. |
| packet { |
| trusted_packet_sequence_id: 4 |
| timestamp: 21000 |
| track_event { |
| track_uuid: 20 |
| categories: "cat" |
| name: "event1_on_p2" |
| type: 3 |
| } |
| } |
| # Another thread t4 in the new process. |
| packet { |
| trusted_packet_sequence_id: 4 |
| timestamp: 22000 |
| incremental_state_cleared: true |
| track_descriptor { |
| uuid: 21 |
| parent_uuid: 20 |
| thread { |
| pid: 5 |
| tid: 4 |
| thread_name: "t4" |
| } |
| } |
| } |
| # Should appear on t4. |
| packet { |
| trusted_packet_sequence_id: 4 |
| timestamp: 22000 |
| track_event { |
| track_uuid: 21 |
| categories: "cat" |
| name: "event1_on_t4" |
| type: 3 |
| } |
| } |
| |
| # Another packet for a thread track in the old process, badly sorted. |
| packet { |
| trusted_packet_sequence_id: 2 |
| timestamp: 6000 |
| track_event { |
| track_uuid: 1 |
| categories: "cat" |
| name: "event3_on_t1" |
| type: 3 |
| } |
| } |
| |
| # Override the track to the default descriptor track for an event with a |
| # TrackEvent type. Should appear on the default descriptor track instead of |
| # "t1". |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 30000 |
| track_event { |
| track_uuid: 0 |
| categories: "cat" |
| name: "event1_on_t1" |
| type: 3 |
| } |
| } |
| |
| # But a legacy event without TrackEvent type falls back to legacy tracks (based |
| # on ThreadDescriptor / async IDs / legacy instant scopes). This instant event |
| # should appear on the process track "p2". |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 31000 |
| track_event { |
| track_uuid: 0 |
| categories: "cat" |
| name: "event2_on_p2" |
| legacy_event { |
| phase: 73 # 'I' |
| instant_event_scope: 2 # Process scope |
| } |
| } |
| } |
| |
| # And pid/tid overrides take effect even for TrackEvent type events. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 32000 |
| track_event { |
| track_uuid: 0 |
| categories: "cat" |
| name: "event2_on_t4" |
| type: 3 |
| legacy_event { |
| pid_override: 5 |
| tid_override: 4 |
| } |
| } |
| } |
| |
| # Track descriptor without name and process/thread association derives its |
| # name from the first event on the track. |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 40000 |
| track_descriptor { |
| uuid: 13 |
| parent_uuid: 10 |
| } |
| } |
| |
| packet { |
| trusted_packet_sequence_id: 1 |
| timestamp: 40000 |
| track_event { |
| track_uuid: 13 |
| categories: "cat" |
| name: "event_and_track_async3" |
| type: 3 |
| } |
| } |