• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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