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 16DROP TABLE IF EXISTS android_jank_cuj_main_thread; 17CREATE PERFETTO TABLE android_jank_cuj_main_thread AS 18SELECT cuj_id, cuj.upid, utid, thread.name, thread_track.id AS track_id 19FROM thread 20JOIN android_jank_cuj cuj USING (upid) 21JOIN thread_track USING (utid) 22JOIN android_jank_cuj_param p USING (cuj_id) 23WHERE 24 (p.main_thread_override IS NULL AND thread.is_main_thread) 25 -- Some CUJs use a dedicated thread for Choreographer callbacks 26 OR (p.main_thread_override = thread.name); 27 28CREATE OR REPLACE PERFETTO FUNCTION android_jank_cuj_app_thread(thread_name STRING) 29RETURNS TABLE(cuj_id INT, upid INT, utid INT, name STRING, track_id INT) AS 30SELECT 31 cuj_id, 32 cuj.upid, 33 utid, 34 thread.name, 35 thread_track.id AS track_id 36FROM thread 37JOIN android_jank_cuj cuj USING (upid) 38JOIN thread_track USING (utid) 39WHERE thread.name = $thread_name; 40 41DROP TABLE IF EXISTS android_jank_cuj_render_thread; 42CREATE PERFETTO TABLE android_jank_cuj_render_thread AS 43SELECT * FROM ANDROID_JANK_CUJ_APP_THREAD('RenderThread'); 44 45DROP TABLE IF EXISTS android_jank_cuj_gpu_completion_thread; 46CREATE PERFETTO TABLE android_jank_cuj_gpu_completion_thread AS 47SELECT * FROM ANDROID_JANK_CUJ_APP_THREAD('GPU completion'); 48 49DROP TABLE IF EXISTS android_jank_cuj_hwc_release_thread; 50CREATE PERFETTO TABLE android_jank_cuj_hwc_release_thread AS 51SELECT * FROM ANDROID_JANK_CUJ_APP_THREAD('HWC release'); 52 53DROP TABLE IF EXISTS android_jank_cuj_sf_process; 54CREATE PERFETTO TABLE android_jank_cuj_sf_process AS 55SELECT * FROM process 56WHERE process.name = '/system/bin/surfaceflinger' 57LIMIT 1; 58 59DROP TABLE IF EXISTS android_jank_cuj_sf_main_thread; 60CREATE PERFETTO TABLE android_jank_cuj_sf_main_thread AS 61SELECT upid, utid, thread.name, thread_track.id AS track_id 62FROM thread 63JOIN android_jank_cuj_sf_process sf_process USING (upid) 64JOIN thread_track USING (utid) 65WHERE thread.is_main_thread; 66 67CREATE OR REPLACE PERFETTO FUNCTION android_jank_cuj_sf_thread(thread_name STRING) 68RETURNS TABLE(upid INT, utid INT, name STRING, track_id INT) AS 69SELECT upid, utid, thread.name, thread_track.id AS track_id 70FROM thread 71JOIN android_jank_cuj_sf_process sf_process USING (upid) 72JOIN thread_track USING (utid) 73WHERE thread.name = $thread_name; 74 75DROP TABLE IF EXISTS android_jank_cuj_sf_gpu_completion_thread; 76CREATE PERFETTO TABLE android_jank_cuj_sf_gpu_completion_thread AS 77SELECT * FROM ANDROID_JANK_CUJ_SF_THREAD('GPU completion'); 78 79DROP TABLE IF EXISTS android_jank_cuj_sf_render_engine_thread; 80CREATE PERFETTO TABLE android_jank_cuj_sf_render_engine_thread AS 81SELECT * FROM ANDROID_JANK_CUJ_SF_THREAD('RenderEngine'); 82