blob: e7c1e2eae50c382dd6b46199739c424c3b234bae [file] [log] [blame]
--
-- 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;