Merge "Update trace processor"
diff --git a/src/trace_processor/metrics/chrome/scroll_jank_cause_queuing_delay.sql b/src/trace_processor/metrics/chrome/scroll_jank_cause_queuing_delay.sql
index b6438e2..f0eebb3 100644
--- a/src/trace_processor/metrics/chrome/scroll_jank_cause_queuing_delay.sql
+++ b/src/trace_processor/metrics/chrome/scroll_jank_cause_queuing_delay.sql
@@ -179,9 +179,9 @@
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15;
-- Create a common name for each "cause" based on the slice stack we found.
-DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay;
+DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay_temp;
-CREATE VIEW scroll_jank_cause_queuing_delay AS
+CREATE VIEW scroll_jank_cause_queuing_delay_temp AS
SELECT
'InputLatency.LatencyInfo.Flow.QueuingDelay.' ||
CASE WHEN jank THEN 'Jank' ELSE 'NoJank' END || '.BlockingTasksUs.' ||
@@ -192,3 +192,29 @@
END || COALESCE("-" || descendant_name, "") AS metric_name,
base.*
FROM descendant_blocking_tasks_queuing_delay base;
+
+-- Figure out the average time taken during non-janky scrolls updates for each
+-- TraceEvent (metric_name) stack.
+DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay_average_time;
+
+CREATE VIEW scroll_jank_cause_queuing_delay_average_no_jank_time AS
+ SELECT
+ metric_name,
+ AVG(dur_overlapping_ns) as avg_dur_overlapping_ns
+ FROM scroll_jank_cause_queuing_delay_temp
+ WHERE NOT jank
+ GROUP BY 1;
+
+-- Join every row (jank and non-jank with the average non-jank time for the given
+-- metric_name).
+DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay;
+
+CREATE VIEW scroll_jank_cause_queuing_delay AS
+ SELECT
+ base.*,
+ COALESCE(avg_no_jank.avg_dur_overlapping_ns, 0)
+ AS avg_no_jank_dur_overlapping_ns
+ FROM
+ scroll_jank_cause_queuing_delay_temp base LEFT JOIN
+ scroll_jank_cause_queuing_delay_average_no_jank_time avg_no_jank ON
+ base.metric_name = avg_no_jank.metric_name;
diff --git a/ui/BUILD.gn b/ui/BUILD.gn
index 28b53bd..0f8cc1f 100644
--- a/ui/BUILD.gn
+++ b/ui/BUILD.gn
@@ -384,6 +384,7 @@
"src/assets/rec_cpu_freq.png",
"src/assets/rec_cpu_voltage.png",
"src/assets/rec_ftrace.png",
+ "src/assets/rec_gpu_mem_total.png",
"src/assets/rec_java_heap_dump.png",
"src/assets/rec_lmk.png",
"src/assets/rec_logcat.png",
diff --git a/ui/src/assets/rec_gpu_mem_total.png b/ui/src/assets/rec_gpu_mem_total.png
new file mode 100644
index 0000000..4b5a44a
--- /dev/null
+++ b/ui/src/assets/rec_gpu_mem_total.png
Binary files differ
diff --git a/ui/src/common/state.ts b/ui/src/common/state.ts
index 24ae0e7..809e8f2 100644
--- a/ui/src/common/state.ts
+++ b/ui/src/common/state.ts
@@ -356,6 +356,7 @@
screenRecord: boolean;
gpuFreq: boolean;
+ gpuMemTotal: boolean;
ftrace: boolean;
atrace: boolean;
@@ -415,6 +416,7 @@
screenRecord: false,
gpuFreq: false,
+ gpuMemTotal: false,
ftrace: false,
atrace: false,
diff --git a/ui/src/controller/record_controller.ts b/ui/src/controller/record_controller.ts
index 69e9884..8a2e278 100644
--- a/ui/src/controller/record_controller.ts
+++ b/ui/src/controller/record_controller.ts
@@ -138,6 +138,10 @@
ftraceEvents.add('power/gpu_frequency');
}
+ if (uiCfg.gpuMemTotal) {
+ ftraceEvents.add('gpu_mem/gpu_mem_total');
+ }
+
if (uiCfg.cpuSyscall) {
ftraceEvents.add('raw_syscalls/sys_enter');
ftraceEvents.add('raw_syscalls/sys_exit');
diff --git a/ui/src/frontend/record_page.ts b/ui/src/frontend/record_page.ts
index 0019042..dc25082 100644
--- a/ui/src/frontend/record_page.ts
+++ b/ui/src/frontend/record_page.ts
@@ -214,13 +214,23 @@
}
function GpuSettings(cssClass: string) {
- return m(`.record-section${cssClass}`, m(Probe, {
- title: 'GPU frequency',
- img: 'rec_cpu_freq.png',
- descr: 'Records gpu frequency via ftrace',
- setEnabled: (cfg, val) => cfg.gpuFreq = val,
- isEnabled: (cfg) => cfg.gpuFreq
- } as ProbeAttrs));
+ return m(
+ `.record-section${cssClass}`,
+ m(Probe, {
+ title: 'GPU frequency',
+ img: 'rec_cpu_freq.png',
+ descr: 'Records gpu frequency via ftrace',
+ setEnabled: (cfg, val) => cfg.gpuFreq = val,
+ isEnabled: (cfg) => cfg.gpuFreq
+ } as ProbeAttrs),
+ m(Probe, {
+ title: 'GPU memory',
+ img: 'rec_gpu_mem_total.png',
+ descr: `Allows to track per process and global gpu memory total updates
+ via ftrace. (Available on recent Android 11+ kernels)`,
+ setEnabled: (cfg, val) => cfg.gpuMemTotal = val,
+ isEnabled: (cfg) => cfg.gpuMemTotal
+ } as ProbeAttrs));
}
function CpuSettings(cssClass: string) {