1-- 2-- Copyright 2019 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-- 16 17 18DROP VIEW IF EXISTS {{table_name_prefix}}_main_thread; 19CREATE VIEW {{table_name_prefix}}_main_thread AS 20SELECT 21 process.name AS process_name, 22 thread.utid 23FROM thread 24JOIN {{process_allowlist_table}} process_allowlist USING (upid) 25JOIN process USING (upid) 26WHERE thread.is_main_thread; 27 28DROP VIEW IF EXISTS {{table_name_prefix}}_render_thread; 29CREATE VIEW {{table_name_prefix}}_render_thread AS 30SELECT 31 process.name AS process_name, 32 thread.utid 33FROM thread 34JOIN {{process_allowlist_table}} process_allowlist USING (upid) 35JOIN process USING (upid) 36WHERE thread.name = 'RenderThread'; 37 38DROP VIEW IF EXISTS {{table_name_prefix}}_gpu_completion_thread; 39CREATE VIEW {{table_name_prefix}}_gpu_completion_thread AS 40SELECT 41 process.name AS process_name, 42 thread.utid 43FROM thread 44JOIN {{process_allowlist_table}} process_allowlist USING (upid) 45JOIN process USING (upid) 46WHERE thread.name = 'GPU completion'; 47 48DROP VIEW IF EXISTS {{table_name_prefix}}_hwc_release_thread; 49CREATE VIEW {{table_name_prefix}}_hwc_release_thread AS 50SELECT 51 process.name AS process_name, 52 thread.utid 53FROM thread 54JOIN {{process_allowlist_table}} process_allowlist USING (upid) 55JOIN process USING (upid) 56WHERE thread.name = 'HWC release'; 57 58DROP TABLE IF EXISTS {{table_name_prefix}}_main_thread_slices; 59CREATE TABLE {{table_name_prefix}}_main_thread_slices AS 60SELECT 61 process_name, 62 thread.utid, 63 slice.*, 64 ts + dur AS ts_end 65FROM slice 66JOIN thread_track ON slice.track_id = thread_track.id 67JOIN {{table_name_prefix}}_main_thread thread USING (utid) 68WHERE dur > 0; 69 70DROP VIEW IF EXISTS {{table_name_prefix}}_do_frame_slices; 71CREATE VIEW {{table_name_prefix}}_do_frame_slices AS 72SELECT 73 *, 74 CAST(STR_SPLIT(name, ' ', 1) AS INTEGER) AS vsync 75FROM {{table_name_prefix}}_main_thread_slices 76WHERE name GLOB 'Choreographer#doFrame*'; 77 78DROP TABLE IF EXISTS {{table_name_prefix}}_render_thread_slices; 79CREATE TABLE {{table_name_prefix}}_render_thread_slices AS 80SELECT 81 process_name, 82 thread.utid, 83 slice.*, 84 ts + dur AS ts_end 85FROM slice 86JOIN thread_track ON slice.track_id = thread_track.id 87JOIN {{table_name_prefix}}_render_thread thread USING (utid) 88WHERE dur > 0; 89 90DROP VIEW IF EXISTS {{table_name_prefix}}_draw_frame_slices; 91CREATE VIEW {{table_name_prefix}}_draw_frame_slices AS 92SELECT 93 *, 94 CAST(STR_SPLIT(name, ' ', 1) AS INTEGER) AS vsync 95FROM {{table_name_prefix}}_render_thread_slices 96WHERE name GLOB 'DrawFrame*'; 97 98DROP VIEW IF EXISTS {{table_name_prefix}}_gpu_completion_slices; 99CREATE VIEW {{table_name_prefix}}_gpu_completion_slices AS 100SELECT 101 process_name, 102 thread.utid, 103 slice.*, 104 ts + dur AS ts_end, 105 -- Extracts 1234 from 'waiting for GPU completion 1234' 106 CAST(STR_SPLIT(slice.name, ' ', 4) AS INTEGER) AS idx 107FROM slice 108JOIN thread_track ON slice.track_id = thread_track.id 109JOIN {{table_name_prefix}}_gpu_completion_thread thread USING (utid) 110WHERE slice.name GLOB 'waiting for GPU completion *' 111 AND dur > 0; 112 113DROP VIEW IF EXISTS {{table_name_prefix}}_hwc_release_slices; 114CREATE VIEW {{table_name_prefix}}_hwc_release_slices AS 115SELECT 116 process_name, 117 thread.utid, 118 slice.*, 119 ts + dur AS ts_end, 120 -- Extracts 1234 from 'waiting for HWC release 1234' 121 CAST(STR_SPLIT(slice.name, ' ', 4) AS INTEGER) AS idx 122FROM slice 123JOIN thread_track ON slice.track_id = thread_track.id 124JOIN {{table_name_prefix}}_hwc_release_thread thread USING (utid) 125WHERE slice.name GLOB 'waiting for HWC release *' 126 AND dur > 0; 127