1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
-- Copyright 2023 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
--
-- https://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.
DROP VIEW IF EXISTS chrome_scrolls;
-- Defines slices for all of the individual scrolls in a trace based on the
-- LatencyInfo-based scroll definition.
--
-- @column id The unique identifier of the scroll.
-- @column ts The start timestamp of the scroll.
-- @column dur The duration of the scroll.
--
-- NOTE: this view of top level scrolls is based on the LatencyInfo definition
-- of a scroll, which differs subtly from the definition based on
-- EventLatencies.
-- TODO(b/278684408): add support for tracking scrolls across multiple Chrome/
-- WebView instances. Currently gesture_scroll_id unique within an instance, but
-- is not unique across multiple instances. Switching to an EventLatency based
-- definition of scrolls should resolve this.
CREATE VIEW chrome_scrolls AS
WITH all_scrolls AS (
SELECT
name,
ts,
dur,
extract_arg(arg_set_id, 'chrome_latency_info.gesture_scroll_id') AS scroll_id
FROM slice
WHERE name GLOB 'InputLatency::GestureScroll*'
AND extract_arg(arg_set_id, 'chrome_latency_info.gesture_scroll_id') IS NOT NULL
),
scroll_starts AS (
SELECT
scroll_id,
MIN(ts) AS scroll_start_ts
FROM all_scrolls
WHERE name = 'InputLatency::GestureScrollBegin'
GROUP BY scroll_id
), scroll_ends AS (
SELECT
scroll_id,
MIN(ts) AS scroll_end_ts
FROM all_scrolls
WHERE name = 'InputLatency::GestureScrollEnd'
GROUP BY scroll_id
)
SELECT
sa.scroll_id AS id,
MIN(ts) AS ts,
CAST(MAX(ts + dur) - MIN(ts) AS INT) AS dur,
IFNULL(ss.scroll_start_ts, -1) AS scroll_start_ts,
IFNULL(se.scroll_end_ts, -1) AS scroll_end_ts
FROM all_scrolls sa
LEFT JOIN scroll_starts ss ON
sa.scroll_id = ss.scroll_id
LEFT JOIN scroll_ends se ON
sa.scroll_id = se.scroll_id
GROUP BY sa.scroll_id;
|