1-- 2-- Copyright 2022 The Android Open Source Project 3-- 4-- Licensed under the Apache License, Version 2.0 (the "License"); 5-- you may not use this file except in compliance with the License. 6-- You may obtain a copy of the License at 7-- 8-- https://www.apache.org/licenses/LICENSE-2.0 9-- 10-- Unless required by applicable law or agreed to in writing, software 11-- distributed under the License is distributed on an "AS IS" BASIS, 12-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13-- See the License for the specific language governing permissions and 14-- limitations under the License. 15-- 16-- Creates metric with info about breakdowns and jank for GestureScrollBegin and GestureScrollUpdate. 17 18-- Select EventLatency events. 19DROP VIEW IF EXISTS event_latency; 20CREATE VIEW event_latency 21AS 22SELECT 23 *, 24 EXTRACT_ARG(arg_set_id, "event_latency.event_type") AS event_type 25FROM slice 26WHERE 27 name = "EventLatency"; 28 29-- Select breakdowns related to EventLatencies from `event_latency` table. 30DROP VIEW IF EXISTS event_latency_breakdowns; 31CREATE VIEW event_latency_breakdowns 32AS 33SELECT 34 slice.id AS slice_id, 35 slice.name AS name, 36 slice.dur AS dur, 37 slice.track_id AS track_id, 38 slice.ts AS ts, 39 event_latency.slice_id AS event_latency_id, 40 event_latency.track_id AS event_latency_track_id, 41 event_latency.ts AS event_latency_ts, 42 event_latency.dur AS event_latency_dur, 43 event_latency.event_type AS event_type 44FROM slice JOIN event_latency 45 ON slice.parent_id = event_latency.slice_id; 46 47-- The function takes a breakdown name and checks if the breakdown name is known or not. 48SELECT CREATE_FUNCTION( 49 'InvalidNameOrNull(name STRING)', 50 -- Returns the input breakdown name if it's an unknown breakdown, NULL otherwise. 51 'STRING', 52 'SELECT 53 CASE 54 WHEN 55 $name not in ( 56 "GenerationToBrowserMain", "GenerationToRendererCompositor", 57 "BrowserMainToRendererCompositor", "RendererCompositorQueueingDelay", 58 "RendererCompositorToMain", "RendererCompositorProcessing", 59 "RendererMainProcessing", "EndActivateToSubmitCompositorFrame", 60 "SubmitCompositorFrameToPresentationCompositorFrame", 61 "ArrivedInRendererCompositorToTermination", 62 "RendererCompositorStartedToTermination", 63 "RendererMainFinishedToTermination", 64 "RendererCompositorFinishedToTermination", 65 "RendererMainStartedToTermination", 66 "RendererCompositorFinishedToBeginImplFrame", 67 "RendererCompositorFinishedToCommit", 68 "RendererCompositorFinishedToEndCommit", 69 "RendererCompositorFinishedToActivation", 70 "RendererCompositorFinishedToEndActivate", 71 "RendererCompositorFinishedToSubmitCompositorFrame", 72 "RendererMainFinishedToBeginImplFrame", 73 "RendererMainFinishedToSendBeginMainFrame", 74 "RendererMainFinishedToCommit", "RendererMainFinishedToEndCommit", 75 "RendererMainFinishedToActivation", "RendererMainFinishedToEndActivate", 76 "RendererMainFinishedToSubmitCompositorFrame", 77 "BeginImplFrameToSendBeginMainFrame", 78 "RendererCompositorFinishedToSendBeginMainFrame", 79 "SendBeginMainFrameToCommit", "Commit", 80 "EndCommitToActivation", "Activation") 81 THEN $name 82 ELSE NULL 83 END' 84); 85 86-- Creates a view where each row contains information about one EventLatency event. Columns are duration of breakdowns. 87-- In the result it will be something like this: 88-- | event_latency_id | event_latency_ts | event_latency_dur | event_type | GenerationToBrowserMainNs | BrowserMainToRendererCompositorNs |...| 89-- |------------------|------------------|-------------------|------------------|----------------------------|------------------------------------|---| 90-- | 123 | 1661947470 | 20 | 1234567 | 30 | 50 | | 91DROP VIEW IF EXISTS event_latency_to_breakdowns; 92CREATE VIEW event_latency_to_breakdowns 93AS 94SELECT 95 event_latency_id, 96 event_latency_track_id, 97 event_latency_ts, 98 event_latency_dur, 99 event_type, 100 max(CASE WHEN name = "GenerationToRendererCompositor" THEN dur END) AS GenerationToRendererCompositorNs, 101 max(CASE WHEN name = "GenerationToBrowserMain" THEN dur END) AS GenerationToBrowserMainNs, 102 max(CASE WHEN name = "BrowserMainToRendererCompositor" THEN dur END) AS BrowserMainToRendererCompositorNs, 103 max(CASE WHEN name = "RendererCompositorQueueingDelay" THEN dur END) AS RendererCompositorQueueingDelayNs, 104 max(CASE WHEN name = "RendererCompositorProcessing" THEN dur END) AS RendererCompositorProcessingNs, 105 max(CASE WHEN name = "RendererCompositorToMain" THEN dur END) AS RendererCompositorToMainNs, 106 max(CASE WHEN name = "RendererMainProcessing" THEN dur END) AS RendererMainProcessingNs, 107 108 max(CASE WHEN name = "ArrivedInRendererCompositorToTermination" THEN dur END) AS ArrivedInRendererCompositorToTerminationNs, 109 max(CASE WHEN name = "RendererCompositorStartedToTermination" THEN dur END) AS RendererCompositorStartedToTerminationNs, 110 max(CASE WHEN name = "RendererCompositorFinishedToTermination" THEN dur END) AS RendererCompositorFinishedToTerminationNs, 111 max(CASE WHEN name = "RendererMainStartedToTermination" THEN dur END) AS RendererMainStartedToTerminationNs, 112 max(CASE WHEN name = "RendererMainFinishedToTermination" THEN dur END) AS RendererMainFinishedToTerminationNs, 113 114 max(CASE WHEN name = "BeginImplFrameToSendBeginMainFrame" THEN dur END) AS BeginImplFrameToSendBeginMainFrameNs, 115 max(CASE WHEN name = "RendererCompositorFinishedToSendBeginMainFrame" THEN dur END) AS RendererCompositorFinishedToSendBeginMainFrameNs, 116 max(CASE WHEN name = "RendererCompositorFinishedToBeginImplFrame" THEN dur END) AS RendererCompositorFinishedToBeginImplFrameNs, 117 max(CASE WHEN name = "RendererCompositorFinishedToCommit" THEN dur END) AS RendererCompositorFinishedToCommitNs, 118 max(CASE WHEN name = "RendererCompositorFinishedToEndCommit" THEN dur END) AS RendererCompositorFinishedToEndCommitNs, 119 max(CASE WHEN name = "RendererCompositorFinishedToActivation" THEN dur END) AS RendererCompositorFinishedToActivationNs, 120 max(CASE WHEN name = "RendererCompositorFinishedToEndActivate" THEN dur END) AS RendererCompositorFinishedToEndActivateNs, 121 max(CASE WHEN name = "RendererCompositorFinishedToSubmitCompositorFrame" THEN dur END) AS RendererCompositorFinishedToSubmitCompositorFrameNs, 122 max(CASE WHEN name = "RendererMainFinishedToBeginImplFrame" THEN dur END) AS RendererMainFinishedToBeginImplFrameNs, 123 max(CASE WHEN name = "RendererMainFinishedToSendBeginMainFrame" THEN dur END) AS RendererMainFinishedToSendBeginMainFrameNs, 124 max(CASE WHEN name = "RendererMainFinishedToCommit" THEN dur END) AS RendererMainFinishedToCommitNs, 125 max(CASE WHEN name = "RendererMainFinishedToEndCommit" THEN dur END) AS RendererMainFinishedToEndCommitNs, 126 max(CASE WHEN name = "RendererMainFinishedToActivation" THEN dur END) AS RendererMainFinishedToActivationNs, 127 max(CASE WHEN name = "RendererMainFinishedToEndActivate" THEN dur END) AS RendererMainFinishedToEndActivateNs, 128 max(CASE WHEN name = "RendererMainFinishedToSubmitCompositorFrame" THEN dur END) AS RendererMainFinishedToSubmitCompositorFrameNs, 129 130 max(CASE WHEN name = "EndActivateToSubmitCompositorFrame" THEN dur END) AS EndActivateToSubmitCompositorFrameNs, 131 max(CASE WHEN name = "SubmitCompositorFrameToPresentationCompositorFrame" THEN dur END) AS SubmitCompositorFrameToPresentationCompositorFrameNs, 132 max(CASE WHEN name = "SendBeginMainFrameToCommit" THEN dur END) AS SendBeginMainFrameToCommitNs, 133 max(CASE WHEN name = "Commit" THEN dur END) AS CommitNs, 134 max(CASE WHEN name = "EndCommitToActivation" THEN dur END) AS EndCommitToActivationNs, 135 max(CASE WHEN name = "Activation" THEN dur END) AS ActivationNs, 136 -- This column indicates whether there are unknown breakdowns. 137 -- Contains: NULL if there are no unknown breakdowns, otherwise a list of unknown breakdows. 138 group_concat(InvalidNameOrNull(name), ', ') AS unknown_stages_seen 139FROM event_latency_breakdowns 140GROUP BY event_latency_id; 141