0

[tracing][stdlib] Add input.sql module

This CL adds a new stdlib module for getting information about
the input pipeline. The first table added to this module has sequences
of the input pipeline processing steps.

PERFETTO_TESTS=`autoninja -C out/Default perfetto_diff_tests && out/Default/bin/run_perfetto_diff_tests`

Bug: b:374736396
Change-Id: Ie800f92ec58b80e4f8cb896fb1c5b3ef9a94f950
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5948879
Reviewed-by: Etienne Pierre-Doray <etiennep@chromium.org>
Reviewed-by: Tushar Agarwal <agarwaltushar@google.com>
Commit-Queue: Oksana Zhuravlova <oksamyt@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1374761}
This commit is contained in:
Oksana Zhuravlova
2024-10-28 18:39:51 +00:00
committed by Chromium LUCI CQ
parent 8cd1492b48
commit fecb9c6621
5 changed files with 137 additions and 0 deletions
DEPS
base/tracing
stdlib
test
data_sha256
trace_processor
diff_tests

7
DEPS

@ -2344,6 +2344,13 @@ deps = {
'generation': 1719520814352733,
'output_file': 'chrome_input_with_frame_view_new.pftrace'
},
{
'object_name': 'test_data/scroll_m131.pftrace-14171c9e502a65a454f39fe14fce8b313c7012a2c14394bed496fc93b1644b0d',
'sha256sum': '14171c9e502a65a454f39fe14fce8b313c7012a2c14394bed496fc93b1644b0d',
'size_bytes': 1247290,
'generation': 1729619115836875,
'output_file': 'scroll_m131.pftrace'
}
],
'dep_type': 'gcs'
},

@ -0,0 +1,87 @@
-- Copyright 2024 The Chromium Authors
-- Use of this source code is governed by a BSD-style license that can be
-- found in the LICENSE file.
INCLUDE PERFETTO MODULE slices.with_context;
-- Processing steps of the Chrome input pipeline.
CREATE PERFETTO TABLE _chrome_input_pipeline_steps_no_input_type(
-- Id of this Chrome input pipeline (LatencyInfo).
latency_id INT,
-- Slice id
slice_id INT,
-- The step timestamp.
ts INT,
-- Step duration.
dur INT,
-- Utid of the thread.
utid INT,
-- Step name (ChromeLatencyInfo.step).
step STRING,
-- Input type.
input_type STRING
) AS
SELECT
EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.trace_id') AS latency_id,
id AS slice_id,
ts,
dur,
utid,
EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.step') AS step,
EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.input_type') AS input_type
FROM
thread_slice
WHERE
step IS NOT NULL
AND latency_id != -1
ORDER BY slice_id, ts;
-- Each row represents one input pipeline.
CREATE PERFETTO TABLE chrome_inputs(
-- Id of this Chrome input pipeline (LatencyInfo).
latency_id INT,
-- Input type.
input_type STRING
) AS
SELECT
-- Id of this Chrome input pipeline (LatencyInfo).
latency_id,
-- MIN selects the first non-null value.
MIN(input_type) as input_type
FROM _chrome_input_pipeline_steps_no_input_type
WHERE latency_id != -1
GROUP BY latency_id;
-- Since not all steps have associated input type (but all steps
-- for a given latency id should have the same input type),
-- populate input type for steps where it would be NULL.
CREATE PERFETTO TABLE chrome_input_pipeline_steps(
-- Id of this Chrome input pipeline (LatencyInfo).
latency_id INT,
-- Slice id
slice_id INT,
-- The step timestamp.
ts INT,
-- Step duration.
dur INT,
-- Utid of the thread.
utid INT,
-- Step name (ChromeLatencyInfo.step).
step STRING,
-- Input type.
input_type STRING
) AS
SELECT
latency_id,
slice_id,
ts,
dur,
utid,
step,
chrome_inputs.input_type AS input_type
FROM
chrome_inputs
LEFT JOIN
_chrome_input_pipeline_steps_no_input_type
USING (latency_id)
WHERE chrome_inputs.input_type IS NOT NULL;

@ -11,6 +11,7 @@ chrome_stdlib_sql_files = [
"histograms.sql",
"interactions.sql",
"metadata.sql",
"input.sql",
"page_loads.sql",
"scroll_interactions.sql",
"speedometer.sql",

@ -0,0 +1 @@
14171c9e502a65a454f39fe14fce8b313c7012a2c14394bed496fc93b1644b0d

@ -352,3 +352,44 @@ class ChromeScrollJankStdlib(TestSuite):
772,"EventLatency",4488833198068189,38185000,21,1,"INERTIAL_GESTURE_SCROLL_UPDATE",42,11.111000,0,4488833211744189,4488833212097189,4488833226028189,4488833227246189,4488833236253189
819,"EventLatency",4488833209202189,38170000,22,1,"INERTIAL_GESTURE_SCROLL_UPDATE",43,11.111000,0,4488833223115189,4488833223308189,4488833237115189,4488833238196189,4488833247372189
"""))
# A trace from M131 (ToT as of adding this test) has the necessary
# events/arguments.
def test_chrome_input_pipeline_steps(self):
return DiffTestBlueprint(
trace=DataPath('scroll_m131.pftrace'),
query="""
INCLUDE PERFETTO MODULE chrome.input;
SELECT latency_id,
input_type,
GROUP_CONCAT(step) AS steps
FROM chrome_input_pipeline_steps
GROUP BY latency_id
ORDER by input_type
LIMIT 20
""",
out=Csv("""
"latency_id","input_type","steps"
-2143831735395279846,"GESTURE_FLING_CANCEL_EVENT","STEP_SEND_INPUT_EVENT_UI"
-2143831735395279570,"GESTURE_FLING_CANCEL_EVENT","STEP_SEND_INPUT_EVENT_UI"
-2143831735395279037,"GESTURE_FLING_CANCEL_EVENT","STEP_SEND_INPUT_EVENT_UI"
-2143831735395280234,"GESTURE_FLING_START_EVENT","STEP_SEND_INPUT_EVENT_UI"
-2143831735395279756,"GESTURE_FLING_START_EVENT","STEP_SEND_INPUT_EVENT_UI"
-2143831735395279516,"GESTURE_FLING_START_EVENT","STEP_SEND_INPUT_EVENT_UI"
-2143831735395278975,"GESTURE_FLING_START_EVENT","STEP_SEND_INPUT_EVENT_UI"
-2143831735395280167,"GESTURE_SCROLL_BEGIN_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395279816,"GESTURE_SCROLL_BEGIN_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395279175,"GESTURE_SCROLL_BEGIN_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395279004,"GESTURE_SCROLL_BEGIN_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395280198,"GESTURE_SCROLL_END_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_GESTURE_EVENT_HANDLED,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL"
-2143831735395279762,"GESTURE_SCROLL_END_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_GESTURE_EVENT_HANDLED,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL"
-2143831735395279584,"GESTURE_SCROLL_END_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_GESTURE_EVENT_HANDLED,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL"
-2143831735395279038,"GESTURE_SCROLL_END_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_GESTURE_EVENT_HANDLED,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL"
-2143831735395280256,"GESTURE_SCROLL_UPDATE_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395280254,"GESTURE_SCROLL_UPDATE_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395280250,"GESTURE_SCROLL_UPDATE_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395280248,"GESTURE_SCROLL_UPDATE_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
-2143831735395280246,"GESTURE_SCROLL_UPDATE_EVENT","STEP_SEND_INPUT_EVENT_UI,STEP_HANDLE_INPUT_EVENT_IMPL,STEP_DID_HANDLE_INPUT_AND_OVERSCROLL,STEP_GESTURE_EVENT_HANDLED"
"""))