1# Sequence 1 defaults to track for "t1". 2packet { 3 trusted_packet_sequence_id: 1 4 timestamp: 0 5 incremental_state_cleared: true 6 track_descriptor { 7 uuid: 1 8 parent_uuid: 10 9 thread { 10 pid: 5 11 tid: 1 12 thread_name: "t1" 13 } 14 } 15 trace_packet_defaults { 16 track_event_defaults { 17 track_uuid: 1 18 } 19 } 20} 21# Sequence 2 defaults to track for "t2". 22packet { 23 trusted_packet_sequence_id: 2 24 timestamp: 0 25 incremental_state_cleared: true 26 track_descriptor { 27 uuid: 2 28 parent_uuid: 10 29 thread { 30 pid: 5 31 tid: 2 32 thread_name: "t2" 33 } 34 } 35 trace_packet_defaults { 36 track_event_defaults { 37 track_uuid: 2 38 } 39 } 40} 41# Both thread tracks are nested underneath this process track. 42packet { 43 trusted_packet_sequence_id: 1 44 timestamp: 0 45 track_descriptor { 46 uuid: 10 47 process { 48 pid: 5 49 process_name: "p1" 50 } 51 } 52} 53# And we have an async track underneath the process too. 54packet { 55 trusted_packet_sequence_id: 1 56 timestamp: 0 57 track_descriptor { 58 uuid: 11 59 parent_uuid: 10 60 name: "async" 61 } 62} 63packet { 64 trusted_packet_sequence_id: 1 65 timestamp: 100 66 track_descriptor { 67 uuid: 12 68 parent_uuid: 10 69 name: "async2" 70 } 71} 72packet { 73 trusted_packet_sequence_id: 2 74 timestamp: 200 75 track_descriptor { 76 uuid: 12 77 parent_uuid: 10 78 name: "async2" 79 } 80} 81 82# Should appear on default track "t1". 83packet { 84 trusted_packet_sequence_id: 1 85 timestamp: 1000 86 track_event { 87 categories: "cat" 88 name: "event1_on_t1" 89 type: 3 90 } 91} 92# Should appear on default track "t2". 93packet { 94 trusted_packet_sequence_id: 2 95 timestamp: 2000 96 track_event { 97 categories: "cat" 98 name: "event1_on_t2" 99 type: 3 100 } 101} 102# Should appear on overridden track "t2". 103packet { 104 trusted_packet_sequence_id: 1 105 timestamp: 3000 106 track_event { 107 track_uuid: 2 108 categories: "cat" 109 name: "event2_on_t2" 110 type: 3 111 } 112} 113# Should appear on process track. 114packet { 115 trusted_packet_sequence_id: 1 116 timestamp: 4000 117 track_event { 118 track_uuid: 10 119 categories: "cat" 120 name: "event1_on_p1" 121 type: 3 122 } 123} 124# Should appear on async track. 125packet { 126 trusted_packet_sequence_id: 1 127 timestamp: 5000 128 track_event { 129 track_uuid: 11 130 categories: "cat" 131 name: "event1_on_async" 132 type: 3 133 } 134} 135# Event for the "async2" track starting on one thread and ending on another. 136packet { 137 trusted_packet_sequence_id: 1 138 timestamp: 5100 139 track_event { 140 track_uuid: 12 141 categories: "cat" 142 name: "event1_on_async2" 143 type: 1 144 } 145} 146packet { 147 trusted_packet_sequence_id: 2 148 timestamp: 5200 149 track_event { 150 track_uuid: 12 151 categories: "cat" 152 name: "event1_on_async2" 153 type: 2 154 } 155} 156 157# If we later see another track descriptor for tid 1, but with a different uuid, 158# we should detect tid reuse and start a new thread. 159packet { 160 trusted_packet_sequence_id: 3 161 timestamp: 10000 162 incremental_state_cleared: true 163 track_descriptor { 164 uuid: 3 165 parent_uuid: 10 166 thread { 167 pid: 5 168 tid: 1 169 thread_name: "t3" 170 } 171 } 172} 173# Should appear on t3. 174packet { 175 trusted_packet_sequence_id: 3 176 timestamp: 11000 177 track_event { 178 track_uuid: 3 179 categories: "cat" 180 name: "event1_on_t3" 181 type: 3 182 } 183} 184 185# If we later see another track descriptor for pid 5, but with a different uuid, 186# we should detect pid reuse and start a new process. 187packet { 188 trusted_packet_sequence_id: 4 189 timestamp: 20000 190 incremental_state_cleared: true 191 track_descriptor { 192 uuid: 20 193 process { 194 pid: 5 195 process_name: "p2" 196 } 197 } 198} 199# Should appear on p2. 200packet { 201 trusted_packet_sequence_id: 4 202 timestamp: 21000 203 track_event { 204 track_uuid: 20 205 categories: "cat" 206 name: "event1_on_p2" 207 type: 3 208 } 209} 210# Another thread t4 in the new process. 211packet { 212 trusted_packet_sequence_id: 4 213 timestamp: 22000 214 incremental_state_cleared: true 215 track_descriptor { 216 uuid: 21 217 parent_uuid: 20 218 thread { 219 pid: 5 220 tid: 4 221 thread_name: "t4" 222 } 223 } 224} 225# Should appear on t4. 226packet { 227 trusted_packet_sequence_id: 4 228 timestamp: 22000 229 track_event { 230 track_uuid: 21 231 categories: "cat" 232 name: "event1_on_t4" 233 type: 3 234 } 235} 236 237# Another packet for a thread track in the old process, badly sorted. 238packet { 239 trusted_packet_sequence_id: 2 240 timestamp: 6000 241 track_event { 242 track_uuid: 1 243 categories: "cat" 244 name: "event3_on_t1" 245 type: 3 246 } 247} 248 249# Override the track to the default descriptor track for an event with a 250# TrackEvent type. Should appear on the default descriptor track instead of 251# "t1". 252packet { 253 trusted_packet_sequence_id: 1 254 timestamp: 30000 255 track_event { 256 track_uuid: 0 257 categories: "cat" 258 name: "event1_on_t1" 259 type: 3 260 } 261} 262 263# But a legacy event without TrackEvent type falls back to legacy tracks (based 264# on ThreadDescriptor / async IDs / legacy instant scopes). This instant event 265# should appear on the process track "p2". 266packet { 267 trusted_packet_sequence_id: 1 268 timestamp: 31000 269 track_event { 270 track_uuid: 0 271 categories: "cat" 272 name: "event2_on_p2" 273 legacy_event { 274 phase: 73 # 'I' 275 instant_event_scope: 2 # Process scope 276 } 277 } 278} 279 280# And pid/tid overrides take effect even for TrackEvent type events. 281packet { 282 trusted_packet_sequence_id: 1 283 timestamp: 32000 284 track_event { 285 track_uuid: 0 286 categories: "cat" 287 name: "event2_on_t4" 288 type: 3 289 legacy_event { 290 pid_override: 5 291 tid_override: 4 292 } 293 } 294} 295