File: predictor_error.sql

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (137 lines) | stat: -rw-r--r-- 4,657 bytes parent folder | download | duplicates (11)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
-- 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.

-- This file implements the scrolling predictor jank metric, as is
-- implemented in cc/metrics/predictor_jank_tracker.cc. See comments in that
-- file to get additional context on how the metric is implemented.
--
-- "Delta" here refers to how much (in pixels) the page offset changed for a
-- given frame due to a scroll.
--
-- For more details please check the following document:
-- http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY.

INCLUDE PERFETTO MODULE chrome.scroll_jank.scroll_offsets;

-- The maximum delta value between three consecutive frames, used to determine
-- whether the sequence in the scroll is fast or slow; the sequence speed is
-- used to determine whether the sequence includes any predictor jank.
CREATE PERFETTO FUNCTION _get_slow_scroll_delta_threshold()
RETURNS DOUBLE AS
SELECT
  7.0;

-- The threshold for the ratio of the delta of middle frame to tbe deltas of its
-- neighbors in a sequence of three frames, if the sequence is considered
-- "slow".
CREATE PERFETTO FUNCTION _get_slow_scroll_janky_threshold()
RETURNS DOUBLE AS
SELECT
  1.4;

-- The threshold for the ratio of the delta of middle frame to tbe deltas of its
-- neighbors in a sequence of three frames, if the sequence is considered
-- "fast".
CREATE PERFETTO FUNCTION _get_fast_scroll_janky_threshold()
RETURNS DOUBLE AS
SELECT
  1.2;

-- Determine the acceptable threshold (see _get_slow_scroll_janky_threshold()
-- and _get_fast_scroll_janky_threshold()) based on the maximum delta value
-- between three consecutive frames.
CREATE PERFETTO FUNCTION _get_scroll_jank_threshold(
    d1 DOUBLE,
    d2 DOUBLE,
    d3 DOUBLE
)
RETURNS DOUBLE AS
SELECT
  CASE
    WHEN max(max($d1, $d2), $d3) <= _get_slow_scroll_delta_threshold()
    THEN _get_slow_scroll_janky_threshold()
    ELSE _get_fast_scroll_janky_threshold()
  END;

-- Calculate the predictor jank of three consecutive frames, if it is above the
-- threshold. Anything below the threshold is not considered jank.
CREATE PERFETTO FUNCTION _get_predictor_jank(
    d1 DOUBLE,
    d2 DOUBLE,
    d3 DOUBLE,
    threshold DOUBLE
)
RETURNS DOUBLE AS
SELECT
  CASE
    WHEN $d2 / max($d1, $d3) >= $threshold
    THEN $d2 / max($d1, $d3) - $threshold
    WHEN min($d1, $d3) / $d2 >= $threshold
    THEN min($d1, $d3) / $d2 - $threshold
    ELSE 0.0
  END;

CREATE PERFETTO TABLE _deltas_and_neighbors AS
SELECT
  scroll_id,
  scroll_update_id,
  ts,
  delta_y,
  relative_offset_y,
  lag(coalesce(delta_y, 0.0)) OVER (PARTITION BY scroll_id ORDER BY ts ASC) AS prev_delta,
  lead(coalesce(delta_y, 0.0)) OVER (PARTITION BY scroll_id ORDER BY ts ASC) AS next_delta
FROM chrome_presented_scroll_offsets;

CREATE PERFETTO TABLE _deltas_and_neighbors_with_threshold AS
SELECT
  scroll_id,
  scroll_update_id,
  ts,
  delta_y,
  relative_offset_y,
  prev_delta,
  next_delta,
  _get_scroll_jank_threshold(abs(prev_delta), abs(delta_y), abs(next_delta)) AS delta_threshold
FROM _deltas_and_neighbors
WHERE
  NOT delta_y IS NULL AND NOT prev_delta IS NULL AND next_delta IS NOT NULL;

-- The scrolling offsets and predictor jank values for the actual (applied)
-- scroll events.
CREATE PERFETTO TABLE chrome_predictor_error (
  -- An ID that ties all EventLatencies in a particular scroll. (implementation
  -- note: This is the EventLatency TraceId of the GestureScrollbegin).
  scroll_id LONG,
  -- An ID that ties this |event_latency_id| with the Trace Id (another
  -- event_latency_id) that it was presented with.
  scroll_update_id LONG,
  -- Presentation timestamp.
  present_ts TIMESTAMP,
  -- The delta in raw coordinates between this presented EventLatency and the
  -- previous presented frame.
  delta_y DOUBLE,
  -- The pixel offset of this presented EventLatency compared to the initial
  -- one.
  relative_offset_y DOUBLE,
  -- The delta in raw coordinates of the previous scroll update event.
  prev_delta DOUBLE,
  -- The delta in raw coordinates of the subsequent scroll update event.
  next_delta DOUBLE,
  -- The jank value based on the discrepancy between scroll predictor
  -- coordinates and the actual deltas between scroll update events.
  predictor_jank DOUBLE,
  -- The threshold used to determine if jank occurred.
  delta_threshold DOUBLE
) AS
SELECT
  scroll_id,
  scroll_update_id,
  ts AS present_ts,
  delta_y,
  relative_offset_y,
  prev_delta,
  next_delta,
  _get_predictor_jank(abs(prev_delta), abs(delta_y), abs(next_delta), delta_threshold) AS predictor_jank,
  delta_threshold
FROM _deltas_and_neighbors_with_threshold;