blob: 3b1981919a99921fdc591a064984a855575c7de3 [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.
SELECT RUN_METRIC('android/process_metadata.sql');
DROP VIEW IF EXISTS android_frame_timeline_metric_per_process;
CREATE VIEW android_frame_timeline_metric_per_process AS
WITH frames AS (
SELECT
process.upid,
process.name AS process_name,
timeline.name AS vsync,
jank_type GLOB '*App Deadline Missed*' AS missed_app_frame,
jank_type GLOB '*SurfaceFlinger CPU Deadline Missed*'
OR jank_type GLOB '*SurfaceFlinger GPU Deadline Missed*'
OR jank_type GLOB '*SurfaceFlinger Scheduling*'
OR jank_type GLOB '*Prediction Error*'
OR jank_type GLOB '*Display HAL*' AS missed_sf_frame,
jank_type GLOB '*App Deadline Missed*'
OR jank_type GLOB '*SurfaceFlinger CPU Deadline Missed*'
OR jank_type GLOB '*SurfaceFlinger GPU Deadline Missed*'
OR jank_type GLOB '*SurfaceFlinger Scheduling*'
OR jank_type GLOB '*Prediction Error*'
OR jank_type GLOB '*Display HAL*'
OR jank_type GLOB '*Dropped Frame*' AS missed_frame,
jank_type GLOB '*Dropped Frame*' AS dropped_frame,
dur,
dur / 1e6 AS dur_ms
FROM actual_frame_timeline_slice timeline
JOIN process USING (upid))
SELECT
upid,
process_name,
process_metadata.metadata AS process_metadata,
COUNT(DISTINCT(vsync)) AS total_frames,
COUNT(DISTINCT(IIF(missed_app_frame, vsync, NULL))) AS missed_app_frames,
COUNT(DISTINCT(IIF(missed_sf_frame, vsync, NULL))) AS missed_sf_frames,
COUNT(DISTINCT(IIF(missed_frame, vsync, NULL))) AS missed_frames,
COUNT(DISTINCT(IIF(dropped_frame, vsync, NULL))) AS dropped_frames,
CAST(PERCENTILE(dur, 50) AS INTEGER) AS frame_dur_p50,
CAST(PERCENTILE(dur, 90) AS INTEGER) AS frame_dur_p90,
CAST(PERCENTILE(dur, 95) AS INTEGER) AS frame_dur_p95,
CAST(PERCENTILE(dur, 99) AS INTEGER) AS frame_dur_p99,
PERCENTILE(dur_ms, 50) AS frame_dur_ms_p50,
PERCENTILE(dur_ms, 90) AS frame_dur_ms_p90,
PERCENTILE(dur_ms, 95) AS frame_dur_ms_p95,
PERCENTILE(dur_ms, 99) AS frame_dur_ms_p99,
CAST(AVG(dur) AS INTEGER) AS frame_dur_avg,
MAX(dur) AS frame_dur_max
FROM frames
JOIN process_metadata USING (upid)
GROUP BY upid, process_name;
DROP VIEW IF EXISTS android_frame_timeline_metric_output;
CREATE VIEW android_frame_timeline_metric_output
AS
SELECT
AndroidFrameTimelineMetric(
'total_frames', SUM(total_frames),
'missed_app_frames', SUM(missed_app_frames),
'dropped_frames', SUM(dropped_frames),
'process', (
SELECT
RepeatedField(
AndroidFrameTimelineMetric_ProcessBreakdown(
'process', process_metadata,
'total_frames', total_frames,
'missed_frames', missed_frames,
'missed_app_frames', missed_app_frames,
'missed_sf_frames', missed_sf_frames,
'frame_dur_max', frame_dur_max,
'frame_dur_avg', frame_dur_avg,
'frame_dur_p50', frame_dur_p50,
'frame_dur_p90', frame_dur_p90,
'frame_dur_p95', frame_dur_p95,
'frame_dur_p99', frame_dur_p99,
'frame_dur_ms_p50', frame_dur_ms_p50,
'frame_dur_ms_p90', frame_dur_ms_p90,
'frame_dur_ms_p95', frame_dur_ms_p95,
'frame_dur_ms_p99', frame_dur_ms_p99,
'dropped_frames', dropped_frames))
FROM android_frame_timeline_metric_per_process))
FROM android_frame_timeline_metric_per_process;