| -- |
| -- 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. |
| -- |
| -- This metric takes each flow event in a InputLatency::{gesture_update} and |
| -- and computes the time from the ancestor_end of the current flow to the |
| -- ancestor_ts of the next flow event. This is a reasonable approximation of the |
| -- time we waited for the next step in the critical flow to start. |
| |
| -- Provides the {{prefix}}_flow_event table which gives us all the flow events |
| -- with associated {gesture_update} events we care about and labels them |
| -- janky or not. |
| SELECT RUN_METRIC('chrome/{{prefix}}_flow_event.sql'); |
| |
| -- Take each flow and next flow (from {{prefix}}_flow_event table) and generate |
| -- the metric name as well as compute the time between. |
| DROP VIEW IF EXISTS {{prefix}}_flow_event_queuing_delay; |
| |
| CREATE VIEW {{prefix}}_flow_event_queuing_delay AS |
| SELECT |
| trace_id, |
| id, |
| ts, |
| dur, |
| track_id, |
| {{id_field}}, |
| avg_vsync_interval, |
| {{prefix}}_slice_id, |
| {{prefix}}_ts, |
| {{prefix}}_dur, |
| {{prefix}}_track_id, |
| jank, |
| step, |
| ancestor_id, |
| ancestor_ts, |
| ancestor_end, |
| next_id, |
| next_step, |
| maybe_next_ancestor_ts, |
| next_track_id, |
| CASE WHEN trace_id = next_trace_id THEN |
| 'InputLatency.LatencyInfo.Flow.QueuingDelay.' |
| || CASE WHEN |
| jank IS NOT NULL |
| AND jank = 1 |
| THEN |
| 'Jank.' |
| ELSE |
| 'NoJank.' |
| END |
| || step || '-to-' || next_step |
| ELSE |
| step |
| END AS description, |
| CASE WHEN maybe_next_ancestor_ts IS NULL THEN |
| NULL |
| ELSE |
| CASE WHEN maybe_next_ancestor_ts > ancestor_end THEN |
| (maybe_next_ancestor_ts - ancestor_end) |
| ELSE |
| 0 |
| END |
| END AS queuing_time_ns |
| FROM {{prefix}}_flow_event |
| ORDER BY {{id_field}}, trace_id, ts; |