| #!/usr/bin/env python3 |
| # Copyright (C) 2021 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # This is intended to test the handling of simple_watcher style mojo events, |
| # which are often missing trace events below them and so are all aggregated |
| # together despite them coming into different mojo interfaces. |
| |
| from os import sys |
| |
| import synth_common |
| |
| from synth_common import ms_to_ns |
| trace = synth_common.create_trace() |
| |
| process_track1 = 1234 |
| |
| trace.add_process_track_descriptor(process_track1, pid=0) |
| |
| process_pid1 = 2345 |
| |
| thread_track1 = 1235 |
| |
| # Main threads have the same ID as the process |
| thread_tid1 = process_pid1 |
| |
| seq1 = 9876 |
| |
| thread1_counter = 60 |
| |
| touch_move_trace_id = 34576 |
| trace_id1 = touch_move_trace_id + 1 |
| trace_id2 = trace_id1 + 1 |
| trace_id3 = trace_id2 + 1 |
| touch_end_trace_id = trace_id3 + 1 |
| |
| touch_gesture_id = 87654 |
| |
| flow_id1 = 45678 |
| flow_id2 = 45679 |
| flow_id3 = 45680 |
| |
| trace.add_input_latency_event_slice( |
| "TouchStart", |
| ts=ms_to_ns(0), |
| dur=ms_to_ns(1), |
| track=touch_move_trace_id, |
| trace_id=touch_move_trace_id, |
| touch_id=touch_gesture_id) |
| |
| trace.add_chrome_process_track_descriptor(process_track1, process_pid1) |
| |
| trace.add_chrome_thread_with_cpu_counter( |
| process_track1, |
| thread_track1, |
| trusted_packet_sequence_id=seq1, |
| counter_track=thread1_counter, |
| pid=process_pid1, |
| tid=thread_tid1, |
| thread_type=trace.prototypes.ThreadDescriptor.ChromeThreadType |
| .CHROME_THREAD_MAIN) |
| |
| # Touch move 1 - not janky |
| trace.add_input_latency_event_slice( |
| "TouchMove", |
| ts=ms_to_ns(0), |
| dur=ms_to_ns(10), |
| track=trace_id1, |
| trace_id=trace_id1, |
| touch_id=touch_gesture_id, |
| is_coalesced=0) |
| |
| trace.add_latency_info_flow( |
| ts=ms_to_ns(0), |
| dur=ms_to_ns(1), |
| trusted_sequence_id=seq1, |
| trace_id=trace_id1, |
| flow_ids=[flow_id1]) |
| |
| # The slices below will block this "not janky" touch move 1. |
| trace.add_track_event_slice( |
| "task", ts=ms_to_ns(2), dur=ms_to_ns(6), trusted_sequence_id=seq1) |
| |
| trace.add_track_event_slice( |
| "subtask", ts=ms_to_ns(3), dur=ms_to_ns(4), trusted_sequence_id=seq1) |
| # This ends the blocking slices of "not janky" touch move 1. |
| |
| trace.add_latency_info_flow( |
| ts=ms_to_ns(11), |
| dur=ms_to_ns(1), |
| trusted_sequence_id=seq1, |
| trace_id=trace_id1, |
| terminating_flow_ids=[flow_id1]) |
| |
| # Touch move 2 - janky |
| trace.add_input_latency_event_slice( |
| "TouchMove", |
| ts=ms_to_ns(16), |
| dur=ms_to_ns(33), |
| track=trace_id2, |
| trace_id=trace_id2, |
| touch_id=touch_gesture_id, |
| is_coalesced=0) |
| |
| trace.add_latency_info_flow( |
| ts=ms_to_ns(16), |
| dur=ms_to_ns(1), |
| trusted_sequence_id=seq1, |
| trace_id=trace_id2, |
| flow_ids=[flow_id2]) |
| |
| # The slices below will block this "janky" touch move 2. |
| trace.add_track_event_slice( |
| "task", ts=ms_to_ns(18), dur=ms_to_ns(29), trusted_sequence_id=seq1) |
| |
| trace.add_track_event_slice( |
| "subtask", ts=ms_to_ns(19), dur=ms_to_ns(27), trusted_sequence_id=seq1) |
| # This ends the blocking slices of "janky" touch move 2. |
| |
| trace.add_latency_info_flow( |
| ts=ms_to_ns(50), |
| dur=ms_to_ns(1), |
| trusted_sequence_id=seq1, |
| trace_id=trace_id2, |
| terminating_flow_ids=[flow_id2]) |
| |
| # Touch move 3 - janky |
| trace.add_input_latency_event_slice( |
| "TouchMove", |
| ts=ms_to_ns(55), |
| dur=ms_to_ns(33), |
| track=trace_id3, |
| trace_id=trace_id3, |
| touch_id=touch_gesture_id, |
| is_coalesced=0) |
| |
| trace.add_latency_info_flow( |
| ts=ms_to_ns(55), |
| dur=ms_to_ns(1), |
| trusted_sequence_id=seq1, |
| trace_id=trace_id3, |
| flow_ids=[flow_id3]) |
| |
| # The slices below will block this "janky" touch move 3. |
| trace.add_track_event_slice( |
| "task", ts=ms_to_ns(57), dur=ms_to_ns(29), trusted_sequence_id=seq1) |
| |
| packet = trace.add_track_event_slice( |
| "subtask", ts=ms_to_ns(58), dur=ms_to_ns(27), trusted_sequence_id=seq1) |
| # This ends the blocking slices of "janky" touch move 3. |
| |
| trace.add_latency_info_flow( |
| ts=ms_to_ns(87), |
| dur=ms_to_ns(1), |
| trusted_sequence_id=seq1, |
| trace_id=trace_id3, |
| step=trace.prototypes.ChromeLatencyInfo.Step.STEP_SEND_INPUT_EVENT_UI, |
| terminating_flow_ids=[flow_id3]) |
| |
| trace.add_latency_info_flow( |
| ts=ms_to_ns(89), |
| dur=ms_to_ns(1), |
| trusted_sequence_id=seq1, |
| trace_id=trace_id3, |
| terminating_flow_ids=[flow_id3]) |
| |
| trace.add_input_latency_event_slice( |
| "TouchEnd", |
| ts=ms_to_ns(90), |
| dur=ms_to_ns(2), |
| track=touch_end_trace_id, |
| trace_id=touch_end_trace_id, |
| touch_id=touch_gesture_id) |
| |
| sys.stdout.buffer.write(trace.trace.SerializeToString()) |