| -- |
| -- Copyright 2022 The Android Open Source Project |
| -- |
| -- Licensed under the Apache License, Version 2.0 (the "License"); |
| -- you may not use this file except in compliance with the License. |
| -- You may obtain a copy of the License at |
| -- |
| -- https://www.apache.org/licenses/LICENSE-2.0 |
| -- |
| -- Unless required by applicable law or agreed to in writing, software |
| -- distributed under the License is distributed on an "AS IS" BASIS, |
| -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| -- See the License for the specific language governing permissions and |
| -- limitations under the License. |
| |
| -- Stores sets of tables that make sense together (e.g. slices on the main thread |
| -- and frame boundaries on the main thread). |
| -- Used to simplify passing arguments to other functions / metrics. |
| DROP TABLE IF EXISTS android_jank_cuj_table_set; |
| CREATE TABLE android_jank_cuj_table_set( |
| name TEXT, |
| slice_table_name TEXT, |
| frame_boundary_table_name TEXT, |
| cuj_boundary_table_name TEXT, |
| frame_table_name TEXT); |
| |
| INSERT INTO android_jank_cuj_table_set( |
| name, |
| slice_table_name, |
| frame_boundary_table_name, |
| cuj_boundary_table_name, |
| frame_table_name) |
| VALUES |
| ('App threads', |
| 'android_jank_cuj_slice', |
| 'android_jank_cuj_frame', |
| 'android_jank_cuj_boundary', |
| 'android_jank_cuj_frame'), |
| ('MainThread', |
| 'android_jank_cuj_main_thread_slice', |
| 'android_jank_cuj_main_thread_frame_boundary', |
| 'android_jank_cuj_main_thread_cuj_boundary', |
| 'android_jank_cuj_frame'), |
| ('RenderThread', |
| 'android_jank_cuj_render_thread_slice', |
| 'android_jank_cuj_render_thread_frame_boundary', |
| 'android_jank_cuj_render_thread_cuj_boundary', |
| 'android_jank_cuj_frame'), |
| ('SF threads', |
| 'android_jank_cuj_sf_slice', |
| 'android_jank_cuj_sf_frame', |
| 'android_jank_cuj_sf_boundary', |
| 'android_jank_cuj_sf_frame'), |
| ('SF MainThread', |
| 'android_jank_cuj_sf_main_thread_slice', |
| 'android_jank_cuj_sf_main_thread_frame_boundary', |
| 'android_jank_cuj_sf_main_thread_cuj_boundary', |
| 'android_jank_cuj_sf_frame'), |
| ('SF RenderEngine', |
| 'android_jank_cuj_sf_render_engine_slice', |
| 'android_jank_cuj_sf_render_engine_frame_boundary', |
| 'android_jank_cuj_sf_boundary', |
| 'android_jank_cuj_sf_frame'); |
| |
| -- Functions below retrieve specific columns for a given table set. |
| |
| SELECT CREATE_FUNCTION( |
| 'ANDROID_JANK_CUJ_TABLE_SET_SLICE(table_set STRING)', |
| 'STRING', |
| 'SELECT slice_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set' |
| ); |
| |
| SELECT CREATE_FUNCTION( |
| 'ANDROID_JANK_CUJ_TABLE_SET_FRAME_BOUNDARY(table_set STRING)', |
| 'STRING', |
| 'SELECT frame_boundary_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set' |
| ); |
| |
| SELECT CREATE_FUNCTION( |
| 'ANDROID_JANK_CUJ_TABLE_SET_CUJ_BOUNDARY(table_set STRING)', |
| 'STRING', |
| 'SELECT cuj_boundary_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set' |
| ); |
| |
| SELECT CREATE_FUNCTION( |
| 'ANDROID_JANK_CUJ_TABLE_SET_FRAME(table_set STRING)', |
| 'STRING', |
| 'SELECT frame_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set' |
| ); |
| |
| -- Checks if two slices, described by ts and dur, ts_second and dur_second, overlap. |
| -- Does not handle cases where slices are unfinished (dur = -1). |
| SELECT |
| CREATE_FUNCTION( |
| 'ANDROID_JANK_CUJ_SLICE_OVERLAPS(ts LONG, dur LONG, ts_second LONG, dur_second LONG)', |
| 'BOOL', |
| 'SELECT |
| -- A starts before B ends and A ends after B starts |
| ($ts < $ts_second + $dur_second AND $ts + $dur > $ts_second) |
| -- or A starts after B starts and A ends before B ends |
| OR ($ts > $ts_second AND $ts < $ts_second + $ts_dur)'); |