blob: bec4fdcdd1a0ed6ef056f678be05854bbd18343e [file] [log] [blame]
--
-- Copyright 2021 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.
-- The HWC execution time will be calculated based on the runtime of
-- HwcPresentOrValidateDisplay, HwcValidateDisplay, and/or HwcPresentDisplay
-- which are happened in the same onMessageRefresh.
-- There are 3 possible combinations how those functions will be called in
-- a single onMessageRefresh, i.e.:
-- 1. HwcPresentOrValidateDisplay and then HwcPresentDisplay
-- 2. HwcPresentOrValidateDisplay
-- 3. HwcValidateDisplay and then HwcPresentDisplay
DROP VIEW IF EXISTS raw_hwc_function_spans;
CREATE VIEW raw_hwc_function_spans AS
SELECT
id,
name,
ts AS begin_ts,
ts+dur AS end_ts,
dur,
LEAD(name, 1, '') OVER (PARTITION BY track_id ORDER BY ts) AS next_name,
LEAD(ts, 1, 0) OVER (PARTITION BY track_id ORDER BY ts) AS next_ts,
LEAD(dur, 1, 0) OVER (PARTITION BY track_id ORDER BY ts) AS next_dur,
LEAD(name, 2, '') OVER (PARTITION BY track_id ORDER BY ts) AS second_next_name,
LEAD(ts, 2, 0) OVER (PARTITION BY track_id ORDER BY ts) AS second_next_ts,
LEAD(dur, 2, 0) OVER (PARTITION BY track_id ORDER BY ts) AS second_next_dur
FROM slice
WHERE name = 'HwcPresentOrValidateDisplay' OR name = 'HwcValidateDisplay'
OR name = 'HwcPresentDisplay' OR name = 'onMessageRefresh'
ORDER BY ts;
DROP VIEW IF EXISTS {{output}};
CREATE VIEW {{output}} AS
SELECT
id,
CASE
WHEN begin_ts <= next_ts AND next_ts <= end_ts THEN
CASE
WHEN begin_ts <= second_next_ts AND second_next_ts <= end_ts
THEN next_dur + second_next_dur
ELSE next_dur
END
ELSE 0
END AS execution_time_ns,
CASE
WHEN next_name = 'HwcPresentOrValidateDisplay'
AND second_next_name = 'HwcPresentDisplay' THEN 'unskipped_validation'
WHEN next_name = 'HwcPresentOrValidateDisplay'
AND second_next_name != 'HwcPresentDisplay' THEN 'skipped_validation'
WHEN next_name = 'HwcValidateDisplay'
AND second_next_name = 'HwcPresentDisplay' THEN 'separated_validation'
ELSE 'unknown'
END AS validation_type
FROM raw_hwc_function_spans
WHERE name = 'onMessageRefresh' AND dur > 0;