1-- 2-- Copyright 2021 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 16SELECT RUN_METRIC( 17 'android/composition_layers.sql', 18 'track_name', 'HWComposer: Total Layer', 19 'output', 'total_layers' 20); 21 22SELECT RUN_METRIC( 23 'android/composition_layers.sql', 24 'track_name', 'HWComposer: DPU Layer', 25 'output', 'dpu_layers' 26); 27 28SELECT RUN_METRIC( 29 'android/composition_layers.sql', 30 'track_name', 'HWComposer: GPU Layer', 31 'output', 'gpu_layers' 32); 33 34SELECT RUN_METRIC( 35 'android/composition_layers.sql', 36 'track_name', 'HWComposer: DPU Cached Layer', 37 'output', 'dpu_cached_layers' 38); 39 40SELECT RUN_METRIC( 41 'android/composition_layers.sql', 42 'track_name', 'HWComposer: SF Cached Layer', 43 'output', 'sf_cached_layers' 44); 45 46SELECT RUN_METRIC( 47 'android/composition_layers.sql', 48 'track_name', 'HWComposer: RCD Layer', 49 'output', 'rcd_layers' 50); 51 52SELECT RUN_METRIC( 53 'android/composer_execution.sql', 54 'output', 'hwc_execution_spans' 55); 56 57 58DROP VIEW IF EXISTS display_ids; 59CREATE VIEW display_ids AS 60SELECT DISTINCT display_id 61FROM ( 62 SELECT display_id FROM total_layers 63 UNION 64 SELECT display_id FROM dpu_layers 65 UNION 66 SELECT display_id FROM gpu_layers 67 UNION 68 SELECT display_id FROM dpu_cached_layers 69 UNION 70 SELECT display_id FROM sf_cached_layers 71 UNION 72 SELECT display_id FROM rcd_layers 73 UNION 74 SELECT display_id FROM hwc_execution_spans 75); 76 77DROP VIEW IF EXISTS metrics_per_display; 78CREATE VIEW metrics_per_display AS 79SELECT AndroidHwcomposerMetrics_MetricsPerDisplay( 80 'display_id', display_id, 81 'composition_total_layers', 82 (SELECT AVG(value) FROM total_layers WHERE display_id = d.display_id), 83 'composition_dpu_layers', 84 (SELECT AVG(value) FROM dpu_layers WHERE display_id = d.display_id), 85 'composition_gpu_layers', 86 (SELECT AVG(value) FROM gpu_layers WHERE display_id = d.display_id), 87 'composition_dpu_cached_layers', 88 (SELECT AVG(value) FROM dpu_cached_layers WHERE display_id = d.display_id), 89 'composition_sf_cached_layers', 90 (SELECT AVG(value) FROM sf_cached_layers WHERE display_id = d.display_id), 91 'composition_rcd_layers', 92 (SELECT AVG(value) FROM rcd_layers WHERE display_id = d.display_id), 93 'skipped_validation_count', 94 (SELECT COUNT(*) FROM hwc_execution_spans 95 WHERE display_id = d.display_id AND validation_type = 'skipped_validation'), 96 'unskipped_validation_count', 97 (SELECT COUNT(*) FROM hwc_execution_spans 98 WHERE display_id = d.display_id AND validation_type = 'unskipped_validation'), 99 'separated_validation_count', 100 (SELECT COUNT(*) FROM hwc_execution_spans 101 WHERE display_id = d.display_id AND validation_type = 'separated_validation'), 102 'unknown_validation_count', 103 (SELECT COUNT(*) FROM hwc_execution_spans 104 WHERE display_id = d.display_id AND validation_type = 'unknown'), 105 'avg_all_execution_time_ms', 106 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 107 WHERE display_id = d.display_id AND validation_type != 'unknown'), 108 'avg_skipped_execution_time_ms', 109 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 110 WHERE display_id = d.display_id AND validation_type = 'skipped_validation'), 111 'avg_unskipped_execution_time_ms', 112 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 113 WHERE display_id = d.display_id AND validation_type = 'unskipped_validation'), 114 'avg_separated_execution_time_ms', 115 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 116 WHERE display_id = d.display_id AND validation_type = 'separated_validation') 117) AS proto 118FROM display_ids d; 119 120SELECT RUN_METRIC('android/process_counter_span_view.sql', 121 'table_name', 'dpu_vote_clock', 122 'counter_name', 'dpu_vote_clock' 123); 124 125SELECT RUN_METRIC('android/process_counter_span_view.sql', 126 'table_name', 'dpu_vote_avg_bw', 127 'counter_name', 'dpu_vote_avg_bw' 128); 129 130SELECT RUN_METRIC('android/process_counter_span_view.sql', 131 'table_name', 'dpu_vote_peak_bw', 132 'counter_name', 'dpu_vote_peak_bw' 133); 134 135SELECT RUN_METRIC('android/process_counter_span_view.sql', 136 'table_name', 'dpu_vote_rt_bw', 137 'counter_name', 'dpu_vote_rt_bw' 138); 139 140DROP VIEW IF EXISTS dpu_vote_process; 141CREATE VIEW dpu_vote_process AS 142SELECT DISTINCT p.upid, p.pid 143FROM ( 144 SELECT upid FROM dpu_vote_clock_span 145 UNION 146 SELECT upid FROM dpu_vote_avg_bw_span 147 UNION 148 SELECT upid FROM dpu_vote_peak_bw_span 149) s JOIN process p USING (upid); 150 151-- These systrace counters are coming from dedicated kernel threads, so we can 152-- assume pid = tid. 153DROP VIEW IF EXISTS dpu_vote_metrics; 154CREATE VIEW dpu_vote_metrics AS 155SELECT AndroidHwcomposerMetrics_DpuVoteMetrics( 156 'tid', pid, 157 'avg_dpu_vote_clock', 158 (SELECT SUM(dpu_vote_clock_val * dur) / SUM(dur) 159 FROM dpu_vote_clock_span s WHERE s.upid = p.upid), 160 'avg_dpu_vote_avg_bw', 161 (SELECT SUM(dpu_vote_avg_bw_val * dur) / SUM(dur) 162 FROM dpu_vote_avg_bw_span s WHERE s.upid = p.upid), 163 'avg_dpu_vote_peak_bw', 164 (SELECT SUM(dpu_vote_peak_bw_val * dur) / SUM(dur) 165 FROM dpu_vote_peak_bw_span s WHERE s.upid = p.upid), 166 'avg_dpu_vote_rt_bw', 167 (SELECT SUM(dpu_vote_rt_bw_val * dur) / SUM(dur) 168 FROM dpu_vote_rt_bw_span s WHERE s.upid = p.upid) 169) AS proto 170FROM dpu_vote_process p 171ORDER BY pid; 172 173DROP VIEW IF EXISTS android_hwcomposer_output; 174CREATE VIEW android_hwcomposer_output AS 175SELECT AndroidHwcomposerMetrics( 176 'composition_total_layers', (SELECT AVG(value) FROM total_layers), 177 'composition_dpu_layers', (SELECT AVG(value) FROM dpu_layers), 178 'composition_gpu_layers', (SELECT AVG(value) FROM gpu_layers), 179 'composition_dpu_cached_layers', (SELECT AVG(value) FROM dpu_cached_layers), 180 'composition_sf_cached_layers', (SELECT AVG(value) FROM sf_cached_layers), 181 'composition_rcd_layers', (SELECT AVG(value) FROM rcd_layers), 182 'skipped_validation_count', 183 (SELECT COUNT(*) FROM hwc_execution_spans 184 WHERE validation_type = 'skipped_validation'), 185 'unskipped_validation_count', 186 (SELECT COUNT(*) FROM hwc_execution_spans 187 WHERE validation_type = 'unskipped_validation'), 188 'separated_validation_count', 189 (SELECT COUNT(*) FROM hwc_execution_spans 190 WHERE validation_type = 'separated_validation'), 191 'unknown_validation_count', 192 (SELECT COUNT(*) FROM hwc_execution_spans 193 WHERE validation_type = 'unknown'), 194 'avg_all_execution_time_ms', 195 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 196 WHERE validation_type != 'unknown'), 197 'avg_skipped_execution_time_ms', 198 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 199 WHERE validation_type = 'skipped_validation'), 200 'avg_unskipped_execution_time_ms', 201 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 202 WHERE validation_type = 'unskipped_validation'), 203 'avg_separated_execution_time_ms', 204 (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans 205 WHERE validation_type = 'separated_validation'), 206 'dpu_vote_metrics', (SELECT RepeatedField(proto) FROM dpu_vote_metrics), 207 'metrics_per_display', (SELECT RepeatedField(proto) FROM metrics_per_display) 208); 209