• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--
2-- Copyright 2022 The Android Open Source Project
3--
4-- Licensed under the Apache License, Version 2.0 (the "License");
5-- you may not use this file except in compliance with the License.
6-- You may obtain a copy of the License at
7--
8--     https://www.apache.org/licenses/LICENSE-2.0
9--
10-- Unless required by applicable law or agreed to in writing, software
11-- distributed under the License is distributed on an "AS IS" BASIS,
12-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-- See the License for the specific language governing permissions and
14-- limitations under the License.
15
16INCLUDE PERFETTO MODULE slices.with_context;
17
18-- This is for backward compatibility only: From the table with main thread name
19-- override (not needed anymore in new android versions), generates a table
20-- containing the utid for the ui thread of each CUJ.
21DROP TABLE IF EXISTS android_jank_cuj_hardcoded_thread_names;
22CREATE PERFETTO TABLE android_jank_cuj_hardcoded_thread_names AS
23SELECT
24  cuj.cuj_id,
25  thread.utid as utid
26FROM thread
27  JOIN android_jank_cuj cuj USING (upid)
28  JOIN thread_track USING (utid)
29  JOIN android_jank_cuj_param p USING (cuj_id)
30WHERE p.main_thread_override = thread.name;
31
32-- Uses both the deprecated android_jank_cuj_hardcoded_thread_names (for
33-- compatibility reasons) and the instant events ui thread overrides.
34-- Instant events for the UI thread always take precendence.
35DROP TABLE IF EXISTS android_jank_cuj_main_thread_overrides;
36CREATE PERFETTO TABLE android_jank_cuj_main_thread_overrides AS
37SELECT
38  cuj.cuj_id,
39  COALESCE(cuj.ui_thread, p.utid) AS main_thread_override
40FROM android_jank_cuj cuj
41  LEFT JOIN android_jank_cuj_hardcoded_thread_names p USING (cuj_id);
42
43DROP TABLE IF EXISTS android_jank_cuj_main_thread;
44CREATE PERFETTO TABLE android_jank_cuj_main_thread AS
45SELECT cuj_id, cuj.upid, utid, thread.name, thread_track.id AS track_id
46FROM thread
47JOIN android_jank_cuj cuj USING (upid)
48JOIN thread_track USING (utid)
49JOIN android_jank_cuj_main_thread_overrides p USING (cuj_id)
50WHERE
51  (p.main_thread_override IS NULL AND thread.is_main_thread)
52  -- Some CUJs use a dedicated thread for Choreographer callbacks
53  OR (p.main_thread_override = thread.utid);
54
55CREATE OR REPLACE PERFETTO FUNCTION android_jank_cuj_app_thread(thread_name STRING)
56RETURNS TABLE(cuj_id INT, upid INT, utid INT, name STRING, track_id INT) AS
57SELECT
58  cuj_id,
59  cuj.upid,
60  utid,
61  thread.name,
62  thread_track.id AS track_id
63FROM thread
64JOIN android_jank_cuj cuj USING (upid)
65JOIN thread_track USING (utid)
66WHERE thread.name = $thread_name;
67
68DROP TABLE IF EXISTS android_jank_cuj_render_thread;
69CREATE PERFETTO TABLE android_jank_cuj_render_thread AS
70SELECT * FROM ANDROID_JANK_CUJ_APP_THREAD('RenderThread');
71
72DROP TABLE IF EXISTS android_jank_cuj_gpu_completion_thread;
73CREATE PERFETTO TABLE android_jank_cuj_gpu_completion_thread AS
74SELECT * FROM ANDROID_JANK_CUJ_APP_THREAD('GPU completion');
75
76DROP TABLE IF EXISTS android_jank_cuj_hwc_release_thread;
77CREATE PERFETTO TABLE android_jank_cuj_hwc_release_thread AS
78SELECT * FROM ANDROID_JANK_CUJ_APP_THREAD('HWC release');
79
80DROP TABLE IF EXISTS android_jank_cuj_sf_process;
81CREATE PERFETTO TABLE android_jank_cuj_sf_process AS
82SELECT * FROM process
83WHERE process.name = '/system/bin/surfaceflinger'
84LIMIT 1;
85
86DROP TABLE IF EXISTS android_jank_cuj_sf_main_thread;
87CREATE PERFETTO TABLE android_jank_cuj_sf_main_thread AS
88SELECT upid, utid, thread.name, thread_track.id AS track_id
89FROM thread
90JOIN android_jank_cuj_sf_process sf_process USING (upid)
91JOIN thread_track USING (utid)
92WHERE thread.is_main_thread;
93
94CREATE OR REPLACE PERFETTO FUNCTION android_jank_cuj_sf_thread(thread_name STRING)
95RETURNS TABLE(upid INT, utid INT, name STRING, track_id INT) AS
96SELECT upid, utid, thread.name, thread_track.id AS track_id
97FROM thread
98JOIN android_jank_cuj_sf_process sf_process USING (upid)
99JOIN thread_track USING (utid)
100WHERE thread.name = $thread_name;
101
102DROP TABLE IF EXISTS android_jank_cuj_sf_gpu_completion_thread;
103CREATE PERFETTO TABLE android_jank_cuj_sf_gpu_completion_thread AS
104SELECT * FROM ANDROID_JANK_CUJ_SF_THREAD('GPU completion');
105
106DROP TABLE IF EXISTS android_jank_cuj_sf_render_engine_thread;
107CREATE PERFETTO TABLE android_jank_cuj_sf_render_engine_thread AS
108SELECT * FROM ANDROID_JANK_CUJ_SF_THREAD('RenderEngine');
109