blob: da02110d2e96affc93d75eb1fea2dd8556131e35 [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.
--
-- Creates metric with info about breakdowns and jank for GestureScrollBegin and GestureScrollUpdate.
-- Select EventLatency events.
DROP VIEW IF EXISTS event_latency;
CREATE VIEW event_latency
AS
SELECT
*,
EXTRACT_ARG(arg_set_id, "event_latency.event_type") AS event_type
FROM slice
WHERE
name = "EventLatency";
-- Select breakdowns related to EventLatencies from `event_latency` table.
DROP VIEW IF EXISTS event_latency_breakdowns;
CREATE VIEW event_latency_breakdowns
AS
SELECT
slice.id AS slice_id,
slice.name AS name,
slice.dur AS dur,
slice.track_id AS track_id,
slice.ts AS ts,
event_latency.slice_id AS event_latency_id,
event_latency.track_id AS event_latency_track_id,
event_latency.ts AS event_latency_ts,
event_latency.dur AS event_latency_dur,
event_latency.event_type AS event_type
FROM slice JOIN event_latency
ON slice.parent_id = event_latency.slice_id;
-- The function takes a breakdown name and checks if the breakdown name is known or not.
SELECT CREATE_FUNCTION(
'InvalidNameOrNull(name STRING)',
-- Returns the input breakdown name if it's an unknown breakdown, NULL otherwise.
'STRING',
'SELECT
CASE
WHEN
$name not in (
"GenerationToBrowserMain", "GenerationToRendererCompositor",
"BrowserMainToRendererCompositor", "RendererCompositorQueueingDelay",
"RendererCompositorToMain", "RendererCompositorProcessing",
"RendererMainProcessing", "EndActivateToSubmitCompositorFrame",
"SubmitCompositorFrameToPresentationCompositorFrame",
"ArrivedInRendererCompositorToTermination",
"RendererCompositorStartedToTermination",
"RendererMainFinishedToTermination",
"RendererCompositorFinishedToTermination",
"RendererMainStartedToTermination",
"RendererCompositorFinishedToBeginImplFrame",
"RendererCompositorFinishedToCommit",
"RendererCompositorFinishedToEndCommit",
"RendererCompositorFinishedToActivation",
"RendererCompositorFinishedToEndActivate",
"RendererCompositorFinishedToSubmitCompositorFrame",
"RendererMainFinishedToBeginImplFrame",
"RendererMainFinishedToSendBeginMainFrame",
"RendererMainFinishedToCommit", "RendererMainFinishedToEndCommit",
"RendererMainFinishedToActivation", "RendererMainFinishedToEndActivate",
"RendererMainFinishedToSubmitCompositorFrame",
"BeginImplFrameToSendBeginMainFrame",
"RendererCompositorFinishedToSendBeginMainFrame",
"SendBeginMainFrameToCommit", "Commit",
"EndCommitToActivation", "Activation")
THEN $name
ELSE NULL
END'
);
-- Creates a view where each row contains information about one EventLatency event. Columns are duration of breakdowns.
-- In the result it will be something like this:
-- | event_latency_id | event_latency_ts | event_latency_dur | event_type | GenerationToBrowserMainNs | BrowserMainToRendererCompositorNs |...|
-- |------------------|------------------|-------------------|------------------|----------------------------|------------------------------------|---|
-- | 123 | 1661947470 | 20 | 1234567 | 30 | 50 | |
DROP VIEW IF EXISTS event_latency_to_breakdowns;
CREATE VIEW event_latency_to_breakdowns
AS
SELECT
event_latency_id,
event_latency_track_id,
event_latency_ts,
event_latency_dur,
event_type,
max(CASE WHEN name = "GenerationToRendererCompositor" THEN dur END) AS GenerationToRendererCompositorNs,
max(CASE WHEN name = "GenerationToBrowserMain" THEN dur END) AS GenerationToBrowserMainNs,
max(CASE WHEN name = "BrowserMainToRendererCompositor" THEN dur END) AS BrowserMainToRendererCompositorNs,
max(CASE WHEN name = "RendererCompositorQueueingDelay" THEN dur END) AS RendererCompositorQueueingDelayNs,
max(CASE WHEN name = "RendererCompositorProcessing" THEN dur END) AS RendererCompositorProcessingNs,
max(CASE WHEN name = "RendererCompositorToMain" THEN dur END) AS RendererCompositorToMainNs,
max(CASE WHEN name = "RendererMainProcessing" THEN dur END) AS RendererMainProcessingNs,
max(CASE WHEN name = "ArrivedInRendererCompositorToTermination" THEN dur END) AS ArrivedInRendererCompositorToTerminationNs,
max(CASE WHEN name = "RendererCompositorStartedToTermination" THEN dur END) AS RendererCompositorStartedToTerminationNs,
max(CASE WHEN name = "RendererCompositorFinishedToTermination" THEN dur END) AS RendererCompositorFinishedToTerminationNs,
max(CASE WHEN name = "RendererMainStartedToTermination" THEN dur END) AS RendererMainStartedToTerminationNs,
max(CASE WHEN name = "RendererMainFinishedToTermination" THEN dur END) AS RendererMainFinishedToTerminationNs,
max(CASE WHEN name = "BeginImplFrameToSendBeginMainFrame" THEN dur END) AS BeginImplFrameToSendBeginMainFrameNs,
max(CASE WHEN name = "RendererCompositorFinishedToSendBeginMainFrame" THEN dur END) AS RendererCompositorFinishedToSendBeginMainFrameNs,
max(CASE WHEN name = "RendererCompositorFinishedToBeginImplFrame" THEN dur END) AS RendererCompositorFinishedToBeginImplFrameNs,
max(CASE WHEN name = "RendererCompositorFinishedToCommit" THEN dur END) AS RendererCompositorFinishedToCommitNs,
max(CASE WHEN name = "RendererCompositorFinishedToEndCommit" THEN dur END) AS RendererCompositorFinishedToEndCommitNs,
max(CASE WHEN name = "RendererCompositorFinishedToActivation" THEN dur END) AS RendererCompositorFinishedToActivationNs,
max(CASE WHEN name = "RendererCompositorFinishedToEndActivate" THEN dur END) AS RendererCompositorFinishedToEndActivateNs,
max(CASE WHEN name = "RendererCompositorFinishedToSubmitCompositorFrame" THEN dur END) AS RendererCompositorFinishedToSubmitCompositorFrameNs,
max(CASE WHEN name = "RendererMainFinishedToBeginImplFrame" THEN dur END) AS RendererMainFinishedToBeginImplFrameNs,
max(CASE WHEN name = "RendererMainFinishedToSendBeginMainFrame" THEN dur END) AS RendererMainFinishedToSendBeginMainFrameNs,
max(CASE WHEN name = "RendererMainFinishedToCommit" THEN dur END) AS RendererMainFinishedToCommitNs,
max(CASE WHEN name = "RendererMainFinishedToEndCommit" THEN dur END) AS RendererMainFinishedToEndCommitNs,
max(CASE WHEN name = "RendererMainFinishedToActivation" THEN dur END) AS RendererMainFinishedToActivationNs,
max(CASE WHEN name = "RendererMainFinishedToEndActivate" THEN dur END) AS RendererMainFinishedToEndActivateNs,
max(CASE WHEN name = "RendererMainFinishedToSubmitCompositorFrame" THEN dur END) AS RendererMainFinishedToSubmitCompositorFrameNs,
max(CASE WHEN name = "EndActivateToSubmitCompositorFrame" THEN dur END) AS EndActivateToSubmitCompositorFrameNs,
max(CASE WHEN name = "SubmitCompositorFrameToPresentationCompositorFrame" THEN dur END) AS SubmitCompositorFrameToPresentationCompositorFrameNs,
max(CASE WHEN name = "SendBeginMainFrameToCommit" THEN dur END) AS SendBeginMainFrameToCommitNs,
max(CASE WHEN name = "Commit" THEN dur END) AS CommitNs,
max(CASE WHEN name = "EndCommitToActivation" THEN dur END) AS EndCommitToActivationNs,
max(CASE WHEN name = "Activation" THEN dur END) AS ActivationNs,
-- This column indicates whether there are unknown breakdowns.
-- Contains: NULL if there are no unknown breakdowns, otherwise a list of unknown breakdows.
group_concat(InvalidNameOrNull(name), ', ') AS unknown_stages_seen
FROM event_latency_breakdowns
GROUP BY event_latency_id;