blob: 2e67da6be0720507c9eab0c078f184d9bb6e2e71 [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.
-- Find all dropped frames, i.e. all PipelineReporters slices whose
-- state is 'STATE_DROPPED'.
DROP VIEW IF EXISTS dropped_pipeline_reporter_slice;
CREATE VIEW dropped_pipeline_reporter_slice AS
SELECT slice.* FROM slice
JOIN args
ON slice.arg_set_id = args.arg_set_id
WHERE
slice.name = 'PipelineReporter'
AND args.string_value = 'STATE_DROPPED';
-- Find the upid of the proccesses where the dropped frames occur.
DROP VIEW IF EXISTS dropped_frames_with_upid;
CREATE VIEW dropped_frames_with_upid AS
SELECT
dropped_pipeline_reporter_slice.ts,
process_track.upid
FROM dropped_pipeline_reporter_slice
JOIN process_track
ON dropped_pipeline_reporter_slice.track_id = process_track.id;
-- Find the name and pid of the processes.
-- If the process name represents a file's pathname, the path part will be
-- removed from the display name of the process.
DROP VIEW IF EXISTS dropped_frames_with_process_info;
CREATE VIEW dropped_frames_with_process_info AS
SELECT
dropped_frames_with_upid.ts,
REPLACE(
process.name,
RTRIM(
process.name,
REPLACE(process.name, '/', '')
),
'') AS process_name,
process.pid AS process_id
FROM dropped_frames_with_upid
JOIN process
ON dropped_frames_with_upid.upid = process.upid;
-- Create the derived event track for dropped frames.
-- All tracks generated from chrome_dropped_frames_event are
-- placed under a track group named 'Dropped Frames', whose summary
-- track is the first track ('All Processes') in chrome_dropped_frames_event.
-- Note that the 'All Processes' track is generated only when dropped frames
-- come from more than one origin process.
DROP VIEW IF EXISTS chrome_dropped_frames_event;
CREATE VIEW chrome_dropped_frames_event AS
SELECT
'slice' AS track_type,
'All Processes' AS track_name,
ts,
0 AS dur,
'Dropped Frame' AS slice_name,
'Dropped Frames' AS group_name
FROM dropped_frames_with_process_info
WHERE (SELECT COUNT(DISTINCT process_id)
FROM dropped_frames_with_process_info) > 1
GROUP BY ts
UNION ALL
SELECT
'slice' AS track_type,
COALESCE(process_name, 'Process') || ' ' || process_id AS track_name,
ts,
0 AS dur,
'Dropped Frame' AS slice_name,
'Dropped Frames' AS group_name
FROM dropped_frames_with_process_info
GROUP BY process_id, ts;
-- Create the dropped frames metric output.
DROP VIEW IF EXISTS chrome_dropped_frames_output;
CREATE VIEW chrome_dropped_frames_output AS
SELECT ChromeDroppedFrames(
'dropped_frame', (
SELECT RepeatedField(
ChromeDroppedFrames_DroppedFrame(
'ts', ts,
'process_name', process_name,
'pid', process_id
)
)
FROM dropped_frames_with_process_info
ORDER BY ts
)
);