File: vsync_intervals.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 (60 lines) | stat: -rw-r--r-- 1,829 bytes parent folder | download | duplicates (9)
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
-- Copyright 2023 The Chromium Authors
-- Use of this source code is governed by a BSD-style license that can be
-- found in the LICENSE file.

-- A simple table that checks the time between VSync (this can be used to
-- determine if we're refreshing at 90 FPS or 60 FPS).
--
-- Note: In traces without the "Java" category there will be no VSync
--       TraceEvents and this table will be empty.
CREATE PERFETTO TABLE chrome_vsync_intervals (
  -- Slice id of the vsync slice.
  slice_id LONG,
  -- Timestamp of the vsync slice.
  ts TIMESTAMP,
  -- Duration of the vsync slice.
  dur DURATION,
  -- Track id of the vsync slice.
  track_id LONG,
  -- Duration until next vsync arrives.
  time_to_next_vsync LONG
) AS
SELECT
  slice_id,
  ts,
  dur,
  track_id,
  lead(ts) OVER (PARTITION BY track_id ORDER BY ts) - ts AS time_to_next_vsync
FROM slice
WHERE
  name = "VSync"
ORDER BY
  track_id,
  ts;

-- Function: compute the average Vysnc interval of the
-- gesture (hopefully this would be either 60 FPS for the whole gesture or 90
-- FPS but that isnt always the case) on the given time segment.
-- If the trace doesnt contain the VSync TraceEvent we just fall back on
-- assuming its 60 FPS (this is the 1.6e+7 in the COALESCE which
-- corresponds to 16 ms or 60 FPS).
CREATE PERFETTO FUNCTION chrome_calculate_avg_vsync_interval(
    -- Interval start time.
    begin_ts TIMESTAMP,
    -- Interval end time.
    end_ts TIMESTAMP
)
-- The average vsync interval on this time segment
-- or 1.6e+7, if trace doesn't contain the VSync TraceEvent.
RETURNS DOUBLE AS
SELECT
  coalesce(
    (
      SELECT
        cast_double!(AVG(time_to_next_vsync))
      FROM chrome_vsync_intervals AS in_query
      WHERE
        NOT time_to_next_vsync IS NULL AND in_query.ts > $begin_ts AND in_query.ts < $end_ts
    ),
    1e+9 / 60
  );