Merge "Remove tasks blocking the End LatencyInfo slice from queuing."
diff --git a/tools/run_python_api_tests.py b/tools/run_python_api_tests.py
index 390c13d..f468896 100755
--- a/tools/run_python_api_tests.py
+++ b/tools/run_python_api_tests.py
@@ -47,6 +47,8 @@
   runner = unittest.TextTestRunner(verbosity=3)
   result = runner.run(suite)
 
+  return 0 if result.wasSuccessful() else 1
+
 
 if __name__ == '__main__':
   sys.exit(main())
diff --git a/tools/trace_processor b/tools/trace_processor
index 0ac3f19..516ee9d 100755
--- a/tools/trace_processor
+++ b/tools/trace_processor
@@ -31,8 +31,8 @@
 import subprocess
 
 TRACE_PROCESSOR_SHELL_SHAS = {
-    'linux': '4d8772482f49d3c34149e73fd7f4cd0c286652b0',
-    'mac': '69f34336ead727bea5f3db83daee5b5d5f88bf6a',
+    'linux': 'ae000220a4697a9164cf79ffe02c875f81fa309a',
+    'mac': '24f20496cd5fe4d2dc84544e13e367b730e5e55c',
 }
 TRACE_PROCESSOR_SHELL_PATH = tempfile.gettempdir()
 TRACE_PROCESSOR_SHELL_BASE_URL = ('https://storage.googleapis.com/perfetto/')
diff --git a/tools/traceconv b/tools/traceconv
index 11c164d..718b145 100755
--- a/tools/traceconv
+++ b/tools/traceconv
@@ -32,8 +32,8 @@
 
 
 TRACE_TO_TEXT_SHAS = {
-    'linux': '9e8dee1170a983a34ddeaf3d7c5045843df4c671',
-    'mac': 'ea93f3609e378168ef4b43744d6bbc99de6d1c47',
+    'linux': 'bdbd589acc854a523747f80192ca008cb92a8ec3',
+    'mac': '2f2c1b6304fcaaf536c219e667b96962f5c265db',
 }
 TRACE_TO_TEXT_PATH = tempfile.gettempdir()
 TRACE_TO_TEXT_BASE_URL = ('https://storage.googleapis.com/perfetto/')
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) {