-- -- 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. DROP VIEW IF EXISTS android_jank_cuj_slice; CREATE VIEW android_jank_cuj_slice AS SELECT cuj_id, process.upid, process.name AS process_name, thread.utid, thread.name AS thread_name, slice.*, slice.ts + slice.dur AS ts_end FROM android_jank_cuj_boundary boundary JOIN process USING (upid) JOIN thread USING (upid) JOIN thread_track USING (utid) JOIN slice ON slice.track_id = thread_track.id -- Take slices which overlap even they started before the boundaries -- This is to be able to query slices that delayed start of a frame AND slice.ts + slice.dur >= boundary.ts AND slice.ts <= boundary.ts_end WHERE slice.dur > 0; DROP TABLE IF EXISTS android_jank_cuj_main_thread_slice; CREATE TABLE android_jank_cuj_main_thread_slice AS SELECT cuj_id, upid, utid, slice.*, slice.ts + slice.dur AS ts_end FROM android_jank_cuj_main_thread_cuj_boundary boundary JOIN thread_track USING (utid) JOIN thread USING (utid) JOIN slice ON slice.track_id = thread_track.id -- Take slices which overlap even they started before the boundaries -- This is to be able to query slices that delayed start of a frame AND slice.ts + slice.dur >= boundary.ts AND slice.ts <= boundary.ts_end WHERE slice.dur > 0; DROP TABLE IF EXISTS android_jank_cuj_render_thread_slice; CREATE TABLE android_jank_cuj_render_thread_slice AS SELECT cuj_id, upid, utid, slice.*, slice.ts + slice.dur AS ts_end FROM android_jank_cuj_render_thread_cuj_boundary boundary JOIN thread_track USING (utid) JOIN thread USING (utid) JOIN slice ON slice.track_id = thread_track.id -- Take slices which overlap even they started before the boundaries -- This is to be able to query slices that delayed start of a frame AND slice.ts + slice.dur >= boundary.ts AND slice.ts <= boundary.ts_end WHERE slice.dur > 0; DROP VIEW IF EXISTS android_jank_cuj_sf_slice; CREATE VIEW android_jank_cuj_sf_slice AS SELECT cuj_id, upid, sf_process.name AS process_name, thread.utid, thread.name AS thread_name, slice.*, slice.ts + slice.dur AS ts_end FROM android_jank_cuj_sf_boundary sf_boundary JOIN android_jank_cuj_sf_process sf_process JOIN thread USING (upid) JOIN thread_track USING (utid) JOIN slice ON slice.track_id = thread_track.id -- Take slices which overlap even they started before the boundaries -- This is to be able to query slices that delayed start of a frame AND slice.ts + slice.dur >= sf_boundary.ts AND slice.ts <= sf_boundary.ts_end WHERE slice.dur > 0; DROP TABLE IF EXISTS android_jank_cuj_sf_main_thread_slice; CREATE TABLE android_jank_cuj_sf_main_thread_slice AS SELECT cuj_id, upid, utid, slice.*, slice.ts + slice.dur AS ts_end FROM android_jank_cuj_sf_main_thread_cuj_boundary boundary JOIN thread_track USING (utid) JOIN thread USING (utid) JOIN slice ON slice.track_id = thread_track.id -- Take slices which overlap even they started before the boundaries -- This is to be able to query slices that delayed start of a frame AND slice.ts + slice.dur >= boundary.ts AND slice.ts <= boundary.ts_end WHERE slice.dur > 0; -- For RenderEngine thread we use a different approach as it's only used when SF falls back to -- client composition. Instead of taking all slices during CUJ, we look at each frame explicitly -- and only take slices that are within RenderEngine frame boundaries. DROP TABLE IF EXISTS android_jank_cuj_sf_render_engine_slice; CREATE TABLE android_jank_cuj_sf_render_engine_slice AS SELECT cuj_id, upid, utid, slice.*, slice.ts + slice.dur AS ts_end FROM android_jank_cuj_sf_render_engine_frame_boundary boundary JOIN thread_track USING (utid) JOIN thread USING (utid) JOIN slice ON slice.track_id = thread_track.id -- Take slices which overlap even they started before the boundaries -- This is to be able to query slices that delayed start of a frame AND slice.ts + slice.dur >= boundary.ts AND slice.ts <= boundary.ts_end WHERE slice.dur > 0;