• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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--
16
17
18-- TOP processes that have a RenderThread, sorted by CPU time on RT
19DROP VIEW IF EXISTS hwui_processes;
20CREATE VIEW hwui_processes AS
21SELECT
22  process.name AS process_name,
23  process.upid AS process_upid,
24  CAST(SUM(sched.dur) / 1e6 AS INT64) AS rt_cpu_time_ms,
25  thread.utid AS render_thread_id
26FROM sched
27JOIN thread ON (thread.utid = sched.utid AND thread.name = 'RenderThread')
28JOIN process ON (process.upid = thread.upid)
29GROUP BY process.name
30ORDER BY rt_cpu_time_ms DESC;
31
32DROP VIEW IF EXISTS hwui_draw_frame;
33CREATE VIEW hwui_draw_frame AS
34SELECT
35  count(*) AS draw_frame_count,
36  max(dur) AS draw_frame_max,
37  min(dur) AS draw_frame_min,
38  avg(dur) AS draw_frame_avg,
39  thread_track.utid AS render_thread_id
40FROM slice
41JOIN thread_track ON (thread_track.id = slice.track_id)
42WHERE slice.name GLOB 'DrawFrame*' AND slice.dur >= 0
43GROUP BY thread_track.utid;
44
45DROP VIEW IF EXISTS hwui_flush_commands;
46CREATE VIEW hwui_flush_commands AS
47SELECT
48  count(*) AS flush_count,
49  max(dur) AS flush_max,
50  min(dur) AS flush_min,
51  avg(dur) AS flush_avg,
52  thread_track.utid AS render_thread_id
53FROM slice
54JOIN thread_track ON (thread_track.id = slice.track_id)
55WHERE slice.name = 'flush commands' AND slice.dur >= 0
56GROUP BY thread_track.utid;
57
58DROP VIEW IF EXISTS hwui_prepare_tree;
59CREATE VIEW hwui_prepare_tree AS
60SELECT
61  count(*) AS prepare_tree_count,
62  max(dur) AS prepare_tree_max,
63  min(dur) AS prepare_tree_min,
64  avg(dur) AS prepare_tree_avg,
65  thread_track.utid AS render_thread_id
66FROM slice
67JOIN thread_track ON (thread_track.id = slice.track_id)
68WHERE slice.name = 'prepareTree' AND slice.dur >= 0
69GROUP BY thread_track.utid;
70
71DROP VIEW IF EXISTS hwui_gpu_completion;
72CREATE VIEW hwui_gpu_completion AS
73SELECT
74  count(*) AS gpu_completion_count,
75  max(dur) AS gpu_completion_max,
76  min(dur) AS gpu_completion_min,
77  avg(dur) AS gpu_completion_avg,
78  thread.upid AS process_upid
79FROM slice
80JOIN thread_track ON (thread_track.id = slice.track_id)
81JOIN thread ON (thread.name = 'GPU completion' AND thread.utid = thread_track.utid)
82WHERE slice.name GLOB 'waiting for GPU completion*' AND slice.dur >= 0
83GROUP BY thread_track.utid;
84
85DROP VIEW IF EXISTS hwui_ui_record;
86CREATE VIEW hwui_ui_record AS
87SELECT
88  count(*) AS ui_record_count,
89  max(dur) AS ui_record_max,
90  min(dur) AS ui_record_min,
91  avg(dur) AS ui_record_avg,
92  thread.upid AS process_upid
93FROM slice
94JOIN thread_track ON (thread_track.id = slice.track_id)
95JOIN thread ON (thread.name = substr(process.name, -15) AND thread.utid = thread_track.utid)
96JOIN process ON (process.upid = thread.upid)
97WHERE slice.name = 'Record View#draw()' AND slice.dur >= 0
98GROUP BY thread_track.utid;
99
100DROP VIEW IF EXISTS hwui_shader_compile;
101CREATE VIEW hwui_shader_compile AS
102SELECT
103  count(*) AS shader_compile_count,
104  sum(dur) AS shader_compile_time,
105  avg(dur) AS shader_compile_avg,
106  thread_track.utid AS render_thread_id
107FROM slice
108JOIN thread_track ON (thread_track.id = slice.track_id)
109WHERE slice.name = 'shader_compile' AND slice.dur >= 0
110GROUP BY thread_track.utid;
111
112DROP VIEW IF EXISTS hwui_cache_hit;
113CREATE VIEW hwui_cache_hit AS
114SELECT
115  count(*) AS cache_hit_count,
116  sum(dur) AS cache_hit_time,
117  avg(dur) AS cache_hit_avg,
118  thread_track.utid AS render_thread_id
119FROM slice
120JOIN thread_track ON (thread_track.id = slice.track_id)
121WHERE slice.name = 'cache_hit' AND slice.dur >= 0
122GROUP BY thread_track.utid;
123
124DROP VIEW IF EXISTS hwui_cache_miss;
125CREATE VIEW hwui_cache_miss AS
126SELECT
127  count(*) AS cache_miss_count,
128  sum(dur) AS cache_miss_time,
129  avg(dur) AS cache_miss_avg,
130  thread_track.utid AS render_thread_id
131FROM slice
132JOIN thread_track ON (thread_track.id = slice.track_id)
133WHERE slice.name = 'cache_miss' AND slice.dur >= 0
134GROUP BY thread_track.utid;
135
136DROP VIEW IF EXISTS hwui_graphics_cpu_mem;
137CREATE VIEW hwui_graphics_cpu_mem AS
138SELECT
139  max(value) AS graphics_cpu_mem_max,
140  min(value) AS graphics_cpu_mem_min,
141  avg(value) AS graphics_cpu_mem_avg,
142  process_counter_track.upid AS process_upid
143FROM counter
144JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
145WHERE name = 'HWUI CPU Memory' AND counter.value >= 0
146GROUP BY process_counter_track.upid;
147
148DROP VIEW IF EXISTS hwui_graphics_gpu_mem;
149CREATE VIEW hwui_graphics_gpu_mem AS
150SELECT
151  max(value) AS graphics_gpu_mem_max,
152  min(value) AS graphics_gpu_mem_min,
153  avg(value) AS graphics_gpu_mem_avg,
154  process_counter_track.upid AS process_upid
155FROM counter
156JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
157WHERE name = 'HWUI Misc Memory' AND counter.value >= 0
158GROUP BY process_counter_track.upid;
159
160DROP VIEW IF EXISTS hwui_texture_mem;
161CREATE VIEW hwui_texture_mem AS
162SELECT
163  max(value) AS texture_mem_max,
164  min(value) AS texture_mem_min,
165  avg(value) AS texture_mem_avg,
166  process_counter_track.upid AS process_upid
167FROM counter
168JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
169WHERE name = 'HWUI Texture Memory' AND counter.value >= 0
170GROUP BY process_counter_track.upid;
171
172DROP VIEW IF EXISTS hwui_all_mem;
173CREATE VIEW hwui_all_mem AS
174SELECT
175  max(value) AS all_mem_max,
176  min(value) AS all_mem_min,
177  avg(value) AS all_mem_avg,
178  process_counter_track.upid AS process_upid
179FROM counter
180JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
181WHERE name = 'HWUI All Memory' AND counter.value >= 0
182GROUP BY process_counter_track.upid;
183
184DROP VIEW IF EXISTS android_hwui_metric_output;
185CREATE VIEW android_hwui_metric_output AS
186SELECT AndroidHwuiMetric(
187  'process_info', (
188    SELECT RepeatedField(
189      ProcessRenderInfo(
190        'process_name', process_name,
191        'rt_cpu_time_ms', rt_cpu_time_ms,
192
193        'draw_frame_count', hwui_draw_frame.draw_frame_count,
194        'draw_frame_max', hwui_draw_frame.draw_frame_max,
195        'draw_frame_min', hwui_draw_frame.draw_frame_min,
196        'draw_frame_avg', hwui_draw_frame.draw_frame_avg,
197
198        'flush_count', hwui_flush_commands.flush_count,
199        'flush_max', hwui_flush_commands.flush_max,
200        'flush_min', hwui_flush_commands.flush_min,
201        'flush_avg', hwui_flush_commands.flush_avg,
202
203        'prepare_tree_count', hwui_prepare_tree.prepare_tree_count,
204        'prepare_tree_max', hwui_prepare_tree.prepare_tree_max,
205        'prepare_tree_min', hwui_prepare_tree.prepare_tree_min,
206        'prepare_tree_avg', hwui_prepare_tree.prepare_tree_avg,
207
208        'gpu_completion_count', hwui_gpu_completion.gpu_completion_count,
209        'gpu_completion_max', hwui_gpu_completion.gpu_completion_max,
210        'gpu_completion_min', hwui_gpu_completion.gpu_completion_min,
211        'gpu_completion_avg', hwui_gpu_completion.gpu_completion_avg,
212
213        'ui_record_count', hwui_ui_record.ui_record_count,
214        'ui_record_max', hwui_ui_record.ui_record_max,
215        'ui_record_min', hwui_ui_record.ui_record_min,
216        'ui_record_avg', hwui_ui_record.ui_record_avg,
217
218        'shader_compile_count', hwui_shader_compile.shader_compile_count,
219        'shader_compile_time', hwui_shader_compile.shader_compile_time,
220        'shader_compile_avg', hwui_shader_compile.shader_compile_avg,
221
222        'cache_hit_count', hwui_cache_hit.cache_hit_count,
223        'cache_hit_time', hwui_cache_hit.cache_hit_time,
224        'cache_hit_avg', hwui_cache_hit.cache_hit_avg,
225
226        'cache_miss_count', hwui_cache_miss.cache_miss_count,
227        'cache_miss_time', hwui_cache_miss.cache_miss_time,
228        'cache_miss_avg', hwui_cache_miss.cache_miss_avg,
229
230        'graphics_cpu_mem_max', CAST(hwui_graphics_cpu_mem.graphics_cpu_mem_max AS INT64),
231        'graphics_cpu_mem_min', CAST(hwui_graphics_cpu_mem.graphics_cpu_mem_min AS INT64),
232        'graphics_cpu_mem_avg', hwui_graphics_cpu_mem.graphics_cpu_mem_avg,
233
234        'graphics_gpu_mem_max', CAST(hwui_graphics_gpu_mem.graphics_gpu_mem_max AS INT64),
235        'graphics_gpu_mem_min', CAST(hwui_graphics_gpu_mem.graphics_gpu_mem_min AS INT64),
236        'graphics_gpu_mem_avg', hwui_graphics_gpu_mem.graphics_gpu_mem_avg,
237
238        'texture_mem_max', CAST(hwui_texture_mem.texture_mem_max AS INT64),
239        'texture_mem_min', CAST(hwui_texture_mem.texture_mem_min AS INT64),
240        'texture_mem_avg', hwui_texture_mem.texture_mem_avg,
241
242        'all_mem_max', CAST(hwui_all_mem.all_mem_max AS INT64),
243        'all_mem_min', CAST(hwui_all_mem.all_mem_min AS INT64),
244        'all_mem_avg', hwui_all_mem.all_mem_avg
245      )
246    )
247    FROM hwui_processes
248    LEFT JOIN hwui_draw_frame ON (hwui_draw_frame.render_thread_id = hwui_processes.render_thread_id)
249    LEFT JOIN hwui_flush_commands ON (hwui_flush_commands.render_thread_id = hwui_processes.render_thread_id)
250    LEFT JOIN hwui_prepare_tree ON (hwui_prepare_tree.render_thread_id = hwui_processes.render_thread_id)
251    LEFT JOIN hwui_gpu_completion ON (hwui_gpu_completion.process_upid = hwui_processes.process_upid)
252    LEFT JOIN hwui_ui_record ON (hwui_ui_record.process_upid = hwui_processes.process_upid)
253    LEFT JOIN hwui_shader_compile ON (hwui_shader_compile.render_thread_id = hwui_processes.render_thread_id)
254    LEFT JOIN hwui_cache_hit ON (hwui_cache_hit.render_thread_id = hwui_processes.render_thread_id)
255    LEFT JOIN hwui_cache_miss ON (hwui_cache_miss.render_thread_id = hwui_processes.render_thread_id)
256    LEFT JOIN hwui_graphics_cpu_mem ON (hwui_graphics_cpu_mem.process_upid = hwui_processes.process_upid)
257    LEFT JOIN hwui_graphics_gpu_mem ON (hwui_graphics_gpu_mem.process_upid = hwui_processes.process_upid)
258    LEFT JOIN hwui_texture_mem ON (hwui_texture_mem.process_upid = hwui_processes.process_upid)
259    LEFT JOIN hwui_all_mem ON (hwui_all_mem.process_upid = hwui_processes.process_upid)
260  )
261);
262