187 lines
4.9 KiB
Python
187 lines
4.9 KiB
Python
|
#!/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())
|