-- -- 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. DROP VIEW IF EXISTS raw_g2d_{{g2d_type}}_spans; CREATE VIEW raw_g2d_{{g2d_type}}_spans AS SELECT ts, t.name AS track_name, LEAD(ts, 1, 0) OVER (PARTITION BY name ORDER BY ts) - ts AS dur, LAG(value, 1, -1) OVER (PARTITION BY name ORDER BY ts) AS prev_g2d_value, value AS g2d_value, LEAD(value, 1, -1) OVER (PARTITION BY name ORDER BY ts) AS next_g2d_value FROM counter c JOIN thread_counter_track t ON t.id = c.track_id WHERE t.name LIKE 'g2d_frame_{{g2d_type}}%'; DROP VIEW IF EXISTS g2d_{{g2d_type}}_spans; CREATE VIEW g2d_{{g2d_type}}_spans AS SELECT ts, track_name, dur FROM raw_g2d_{{g2d_type}}_spans WHERE g2d_value = 1 AND next_g2d_value = 0; DROP VIEW IF EXISTS g2d_{{g2d_type}}_errors; CREATE VIEW g2d_{{g2d_type}}_errors AS SELECT ts, track_name, g2d_value FROM raw_g2d_{{g2d_type}}_spans WHERE (g2d_value = 1 AND next_g2d_value = 1) OR (prev_g2d_value = 0 AND g2d_value = 0); DROP VIEW IF EXISTS g2d_{{g2d_type}}_instances; CREATE VIEW g2d_{{g2d_type}}_instances AS SELECT G2dMetrics_G2dInstance( 'name', g.track_name, 'max_dur_ns', CAST(MAX(g.dur) AS INT64), 'min_dur_ns', CAST(MIN(g.dur) AS INT64), 'avg_dur_ns', CAST(AVG(g.dur) AS INT64), 'frame_count', COUNT(*), 'error_count', (SELECT COUNT(*) FROM g2d_{{g2d_type}}_errors e WHERE e.track_name = g.track_name) ) AS instance FROM g2d_{{g2d_type}}_spans g GROUP BY g.track_name; DROP VIEW IF EXISTS {{output_table}}; CREATE VIEW {{output_table}} AS SELECT G2dMetrics_G2dMetric( 'instances', (SELECT RepeatedField(instance) FROM g2d_{{g2d_type}}_instances), 'max_dur_ns', CAST(MAX(dur) AS INT64), 'min_dur_ns', CAST(MIN(dur) AS INT64), 'avg_dur_ns', CAST(AVG(dur) AS INT64), 'frame_count', COUNT(*), 'error_count', (SELECT COUNT(*) FROM g2d_{{g2d_type}}_errors) ) AS metric FROM g2d_{{g2d_type}}_spans;