blob: 4943f2efff09e785612fe077902c94936c6b5fa3 [file] [log] [blame]
--
-- Copyright 2020 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.
--
-- TOP processes that have a RenderThread, sorted by CPU time on RT
CREATE VIEW hwui_processes AS
SELECT
process.name as process_name,
process.upid as process_upid,
CAST(SUM(sched.dur) / 1e6 as INT64) as rt_cpu_time_ms,
thread.utid as render_thread_id
FROM sched
INNER JOIN thread ON (thread.utid = sched.utid AND thread.name='RenderThread')
INNER JOIN process ON (process.upid = thread.upid)
GROUP BY process.name
ORDER BY rt_cpu_time_ms DESC;
CREATE VIEW hwui_draw_frame AS
SELECT
count(*) as draw_frame_count,
max(dur) as draw_frame_max,
min(dur) as draw_frame_min,
avg(dur) as draw_frame_avg,
thread_track.utid as render_thread_id
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
WHERE slice.name='DrawFrame' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_flush_commands AS
SELECT
count(*) as flush_count,
max(dur) as flush_max,
min(dur) as flush_min,
avg(dur) as flush_avg,
thread_track.utid as render_thread_id
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
WHERE slice.name='flush commands' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_prepare_tree AS
SELECT
count(*) as prepare_tree_count,
max(dur) as prepare_tree_max,
min(dur) as prepare_tree_min,
avg(dur) as prepare_tree_avg,
thread_track.utid as render_thread_id
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
WHERE slice.name='prepareTree' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_gpu_completion AS
SELECT
count(*) as gpu_completion_count,
max(dur) as gpu_completion_max,
min(dur) as gpu_completion_min,
avg(dur) as gpu_completion_avg,
thread.upid as process_upid
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
INNER JOIN thread ON (thread.name='GPU completion' AND thread.utid = thread_track.utid)
WHERE slice.name LIKE 'waiting for GPU completion%' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_ui_record AS
SELECT
count(*) as ui_record_count,
max(dur) as ui_record_max,
min(dur) as ui_record_min,
avg(dur) as ui_record_avg,
thread.upid as process_upid
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
INNER JOIN thread ON (thread.name=substr(process.name,-15) AND thread.utid = thread_track.utid)
INNER JOIN process ON (process.upid = thread.upid)
WHERE slice.name='Record View#draw()' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_shader_compile AS
SELECT
count(*) as shader_compile_count,
sum(dur) as shader_compile_time,
avg(dur) as shader_compile_avg,
thread_track.utid as render_thread_id
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
WHERE slice.name='shader_compile' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_cache_hit AS
SELECT
count(*) as cache_hit_count,
sum(dur) as cache_hit_time,
avg(dur) as cache_hit_avg,
thread_track.utid as render_thread_id
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
WHERE slice.name='cache_hit' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_cache_miss AS
SELECT
count(*) as cache_miss_count,
sum(dur) as cache_miss_time,
avg(dur) as cache_miss_avg,
thread_track.utid as render_thread_id
FROM slice
INNER JOIN thread_track ON (thread_track.id = slice.track_id)
WHERE slice.name='cache_miss' AND slice.dur >= 0
GROUP BY thread_track.utid;
CREATE VIEW hwui_graphics_cpu_mem AS
SELECT
max(value) as graphics_cpu_mem_max,
min(value) as graphics_cpu_mem_min,
avg(value) as graphics_cpu_mem_avg,
process_counter_track.upid as process_upid
FROM counter
INNER JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
WHERE name='HWUI CPU Memory' AND counter.value >= 0
GROUP BY process_counter_track.upid;
CREATE VIEW hwui_graphics_gpu_mem AS
SELECT
max(value) as graphics_gpu_mem_max,
min(value) as graphics_gpu_mem_min,
avg(value) as graphics_gpu_mem_avg,
process_counter_track.upid as process_upid
FROM counter
INNER JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
WHERE name='HWUI Misc Memory' AND counter.value >= 0
GROUP BY process_counter_track.upid;
CREATE VIEW hwui_texture_mem AS
SELECT
max(value) as texture_mem_max,
min(value) as texture_mem_min,
avg(value) as texture_mem_avg,
process_counter_track.upid as process_upid
FROM counter
INNER JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
WHERE name='HWUI Texture Memory' AND counter.value >= 0
GROUP BY process_counter_track.upid;
CREATE VIEW hwui_all_mem AS
SELECT
max(value) as all_mem_max,
min(value) as all_mem_min,
avg(value) as all_mem_avg,
process_counter_track.upid as process_upid
FROM counter
INNER JOIN process_counter_track ON (counter.track_id = process_counter_track.id)
WHERE name='HWUI All Memory' AND counter.value >= 0
GROUP BY process_counter_track.upid;
CREATE VIEW android_hwui_metric_output AS
SELECT AndroidHwuiMetric(
'process_info', (
SELECT RepeatedField(
ProcessRenderInfo(
'process_name', process_name,
'rt_cpu_time_ms', rt_cpu_time_ms,
'draw_frame_count', hwui_draw_frame.draw_frame_count,
'draw_frame_max', hwui_draw_frame.draw_frame_max,
'draw_frame_min', hwui_draw_frame.draw_frame_min,
'draw_frame_avg', hwui_draw_frame.draw_frame_avg,
'flush_count', hwui_flush_commands.flush_count,
'flush_max', hwui_flush_commands.flush_max,
'flush_min', hwui_flush_commands.flush_min,
'flush_avg', hwui_flush_commands.flush_avg,
'prepare_tree_count', hwui_prepare_tree.prepare_tree_count,
'prepare_tree_max', hwui_prepare_tree.prepare_tree_max,
'prepare_tree_min', hwui_prepare_tree.prepare_tree_min,
'prepare_tree_avg', hwui_prepare_tree.prepare_tree_avg,
'gpu_completion_count', hwui_gpu_completion.gpu_completion_count,
'gpu_completion_max', hwui_gpu_completion.gpu_completion_max,
'gpu_completion_min', hwui_gpu_completion.gpu_completion_min,
'gpu_completion_avg', hwui_gpu_completion.gpu_completion_avg,
'ui_record_count', hwui_ui_record.ui_record_count,
'ui_record_max', hwui_ui_record.ui_record_max,
'ui_record_min', hwui_ui_record.ui_record_min,
'ui_record_avg', hwui_ui_record.ui_record_avg,
'shader_compile_count', hwui_shader_compile.shader_compile_count,
'shader_compile_time', hwui_shader_compile.shader_compile_time,
'shader_compile_avg', hwui_shader_compile.shader_compile_avg,
'cache_hit_count', hwui_cache_hit.cache_hit_count,
'cache_hit_time', hwui_cache_hit.cache_hit_time,
'cache_hit_avg', hwui_cache_hit.cache_hit_avg,
'cache_miss_count', hwui_cache_miss.cache_miss_count,
'cache_miss_time', hwui_cache_miss.cache_miss_time,
'cache_miss_avg', hwui_cache_miss.cache_miss_avg,
'graphics_cpu_mem_max', CAST(hwui_graphics_cpu_mem.graphics_cpu_mem_max as INT64),
'graphics_cpu_mem_min', CAST(hwui_graphics_cpu_mem.graphics_cpu_mem_min as INT64),
'graphics_cpu_mem_avg', hwui_graphics_cpu_mem.graphics_cpu_mem_avg,
'graphics_gpu_mem_max', CAST(hwui_graphics_gpu_mem.graphics_gpu_mem_max as INT64),
'graphics_gpu_mem_min', CAST(hwui_graphics_gpu_mem.graphics_gpu_mem_min as INT64),
'graphics_gpu_mem_avg', hwui_graphics_gpu_mem.graphics_gpu_mem_avg,
'texture_mem_max', CAST(hwui_texture_mem.texture_mem_max as INT64),
'texture_mem_min', CAST(hwui_texture_mem.texture_mem_min as INT64),
'texture_mem_avg', hwui_texture_mem.texture_mem_avg,
'all_mem_max', CAST(hwui_all_mem.all_mem_max as INT64),
'all_mem_min', CAST(hwui_all_mem.all_mem_min as INT64),
'all_mem_avg', hwui_all_mem.all_mem_avg
)
)
FROM hwui_processes
LEFT JOIN hwui_draw_frame ON (hwui_draw_frame.render_thread_id = hwui_processes.render_thread_id)
LEFT JOIN hwui_flush_commands ON (hwui_flush_commands.render_thread_id = hwui_processes.render_thread_id)
LEFT JOIN hwui_prepare_tree ON (hwui_prepare_tree.render_thread_id = hwui_processes.render_thread_id)
LEFT JOIN hwui_gpu_completion ON (hwui_gpu_completion.process_upid = hwui_processes.process_upid)
LEFT JOIN hwui_ui_record ON (hwui_ui_record.process_upid = hwui_processes.process_upid)
LEFT JOIN hwui_shader_compile ON (hwui_shader_compile.render_thread_id = hwui_processes.render_thread_id)
LEFT JOIN hwui_cache_hit ON (hwui_cache_hit.render_thread_id = hwui_processes.render_thread_id)
LEFT JOIN hwui_cache_miss ON (hwui_cache_miss.render_thread_id = hwui_processes.render_thread_id)
LEFT JOIN hwui_graphics_cpu_mem ON (hwui_graphics_cpu_mem.process_upid = hwui_processes.process_upid)
LEFT JOIN hwui_graphics_gpu_mem ON (hwui_graphics_gpu_mem.process_upid = hwui_processes.process_upid)
LEFT JOIN hwui_texture_mem ON (hwui_texture_mem.process_upid = hwui_processes.process_upid)
LEFT JOIN hwui_all_mem ON (hwui_all_mem.process_upid = hwui_processes.process_upid)
)
);