1-- 2-- Copyright 2020 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-- 16DROP VIEW IF EXISTS same_frame; 17CREATE VIEW same_frame AS 18SELECT COUNT(name) AS total_duplicate_frames 19FROM counters 20WHERE name = 'SAME_FRAME' 21 AND value = 1; 22 23DROP VIEW IF EXISTS duplicate_frames_logged; 24CREATE VIEW duplicate_frames_logged AS 25SELECT CASE WHEN COUNT(name) > 0 THEN 1 ELSE 0 END AS logs_found 26FROM counters 27WHERE name = 'SAME_FRAME' AND value = 0; 28 29DROP VIEW IF EXISTS dpu_underrun; 30CREATE VIEW dpu_underrun AS 31SELECT COUNT(name) AS total_dpu_underrun_count 32FROM counters 33WHERE name = 'DPU_UNDERRUN' 34 AND value = 1; 35 36DROP VIEW IF EXISTS non_repeated_panel_fps; 37CREATE VIEW non_repeated_panel_fps AS 38SELECT * 39FROM ( 40 SELECT 41 ts, 42 value, 43 track_id, 44 LAG(value, 1, 0) OVER (PARTITION BY track_id ORDER BY ts) AS prev_value 45 FROM counter c JOIN track t ON c.track_id = t.id 46 WHERE t.name = 'panel_fps' 47 ORDER BY ts 48) 49WHERE prev_value != value; 50 51DROP VIEW IF EXISTS panel_fps_spans; 52CREATE VIEW panel_fps_spans AS 53SELECT * 54FROM ( 55 SELECT 56 ts, 57 value, 58 LEAD(ts) OVER (PARTITION BY track_id ORDER BY ts) - ts AS dur 59 FROM non_repeated_panel_fps 60 ORDER BY ts 61) 62WHERE dur > 0; 63 64DROP VIEW IF EXISTS update_power_state_stats; 65CREATE VIEW update_power_state_stats AS 66SELECT 67 CAST(AVG(dur) / 1e3 AS INT64) AS avg_runtime_micro_secs 68FROM slice 69WHERE slice.name = 'DisplayPowerController#updatePowerState' AND slice.dur >= 0; 70 71DROP VIEW IF EXISTS display_metrics_output; 72CREATE VIEW display_metrics_output AS 73SELECT AndroidDisplayMetrics( 74 'total_duplicate_frames', (SELECT total_duplicate_frames 75 FROM same_frame), 76 'duplicate_frames_logged', (SELECT logs_found 77 FROM duplicate_frames_logged), 78 'total_dpu_underrun_count', (SELECT total_dpu_underrun_count 79 FROM dpu_underrun), 80 'refresh_rate_switches', (SELECT COUNT(*) FROM panel_fps_spans), 81 'refresh_rate_stats', ( 82 SELECT RepeatedField(metric) 83 FROM ( 84 SELECT AndroidDisplayMetrics_RefreshRateStat( 85 'refresh_rate_fps', CAST(value AS UINT32), 86 'count', COUNT(*), 87 'total_dur_ms', SUM(dur) / 1e6, 88 'avg_dur_ms', AVG(dur) / 1e6 89 ) AS metric 90 FROM panel_fps_spans 91 GROUP BY value 92 ORDER BY value 93 ) 94 ), 95 'update_power_state', ( 96 SELECT AndroidDisplayMetrics_UpdatePowerState( 97 'avg_runtime_micro_secs', avg_runtime_micro_secs 98 ) 99 FROM update_power_state_stats 100 ) 101); 102