Merge "metrics: Refactor RAIL Mode power queries"
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 65ee8a9..9ccc4b6 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -22,8 +22,8 @@
   def long_line_sources(x):
     return input.FilterSourceFile(
         x,
-        allow_list=".*",
-        block_list=[
+        files_to_check='.*',
+        files_to_skip=[
             'Android[.]bp', '.*[.]json$', '.*[.]sql$', '.*[.]out$',
             'test/trace_processor/.*/index$', '.*\bBUILD$', 'WORKSPACE',
             '.*/Makefile$', '/perfetto_build_flags.h$'
@@ -63,7 +63,7 @@
   # If no GN files were modified, bail out.
   def build_file_filter(x):
     return input_api.FilterSourceFile(
-        x, allow_list=('.*BUILD[.]gn$', '.*[.]gni$', 'BUILD\.extras', tool))
+        x, files_to_check=('.*BUILD[.]gn$', '.*[.]gni$', 'BUILD\.extras', tool))
 
   if not input_api.AffectedSourceFiles(build_file_filter):
     return []
@@ -81,7 +81,7 @@
   # If no GN files were modified, bail out.
   def build_file_filter(x):
     return input_api.FilterSourceFile(
-        x, allow_list=('.*BUILD[.]gn$', '.*[.]gni$', tool))
+        x, files_to_check=('.*BUILD[.]gn$', '.*[.]gni$', tool))
 
   if not input_api.AffectedSourceFiles(build_file_filter):
     return []
@@ -98,7 +98,7 @@
 
   def file_filter(x):
     return input_api.FilterSourceFile(
-        x, allow_list=['.*[.]cc$', '.*[.]h$', tool])
+        x, files_to_check=['.*[.]cc$', '.*[.]h$', tool])
 
   if not input_api.AffectedSourceFiles(file_filter):
     return []
@@ -134,7 +134,7 @@
   ]
 
   def file_filter(x):
-    return input_api.FilterSourceFile(x, allow_list=[r'.*\.h$', r'.*\.cc$'])
+    return input_api.FilterSourceFile(x, files_to_check=[r'.*\.h$', r'.*\.cc$'])
 
   errors = []
   for f in input_api.AffectedSourceFiles(file_filter):
@@ -151,7 +151,8 @@
   tool = 'tools/check_include_violations'
 
   def file_filter(x):
-    return input_api.FilterSourceFile(x, allow_list=['include/.*[.]h$', tool])
+    return input_api.FilterSourceFile(
+        x, files_to_check=['include/.*[.]h$', tool])
 
   if not input_api.AffectedSourceFiles(file_filter):
     return []
@@ -165,7 +166,7 @@
 
   def file_filter(x):
     return input_api.FilterSourceFile(
-        x, allow_list=['protos/perfetto/.*[.]proto$', '.*[.]h', tool])
+        x, files_to_check=['protos/perfetto/.*[.]proto$', '.*[.]h', tool])
 
   if not input_api.AffectedSourceFiles(file_filter):
     return []
@@ -182,7 +183,7 @@
 
   def build_file_filter(x):
     return input_api.FilterSourceFile(
-        x, allow_list=['protos/perfetto/.*[.]proto$', tool])
+        x, files_to_check=['protos/perfetto/.*[.]proto$', tool])
 
   if not input_api.AffectedSourceFiles(build_file_filter):
     return []
@@ -216,7 +217,7 @@
 
   def file_filter(x):
     return input_api.FilterSourceFile(
-        x, allow_list=['protos/perfetto/.*[.]proto$', tool])
+        x, files_to_check=['protos/perfetto/.*[.]proto$', tool])
 
   if not input_api.AffectedSourceFiles(file_filter):
     return []
diff --git a/protos/perfetto/metrics/android/display_metrics.proto b/protos/perfetto/metrics/android/display_metrics.proto
index fc858ac..4c36b5b 100644
--- a/protos/perfetto/metrics/android/display_metrics.proto
+++ b/protos/perfetto/metrics/android/display_metrics.proto
@@ -27,4 +27,7 @@
 
   // Stat reports whether there is any duplicate_frames tracked
   optional uint32 duplicate_frames_logged = 2;
-}
\ No newline at end of file
+
+  // Stat that reports the number of dpu underrrun occurs count.
+  optional uint32 total_dpu_underrun_count = 3;
+}
diff --git a/protos/perfetto/metrics/perfetto_merged_metrics.proto b/protos/perfetto/metrics/perfetto_merged_metrics.proto
index cad0782..c803dac 100644
--- a/protos/perfetto/metrics/perfetto_merged_metrics.proto
+++ b/protos/perfetto/metrics/perfetto_merged_metrics.proto
@@ -122,7 +122,11 @@
 
   // Stat reports whether there is any duplicate_frames tracked
   optional uint32 duplicate_frames_logged = 2;
+
+  // Stat that reports the number of dpu underrrun occurs count.
+  optional uint32 total_dpu_underrun_count = 3;
 }
+
 // End of protos/perfetto/metrics/android/display_metrics.proto
 
 // Begin of protos/perfetto/metrics/android/gpu_metric.proto
diff --git a/src/profiling/symbolizer/filesystem_windows.cc b/src/profiling/symbolizer/filesystem_windows.cc
index 935703c..362e4bf 100644
--- a/src/profiling/symbolizer/filesystem_windows.cc
+++ b/src/profiling/symbolizer/filesystem_windows.cc
@@ -25,7 +25,7 @@
 bool WalkDirectories(std::vector<std::string> dirs, FileCallback fn) {
   std::vector<std::string> sub_dirs;
   for (const std::string& dir : dirs) {
-    LPWIN32_FIND_DATAA file;
+    WIN32_FIND_DATAA file;
     HANDLE fh = FindFirstFileA((dir + "\\*").c_str(), &file);
     if (fh != INVALID_HANDLE_VALUE) {
       do {
diff --git a/src/trace_processor/metrics/android/display_metrics.sql b/src/trace_processor/metrics/android/display_metrics.sql
index 321ef4d..4205c1f 100644
--- a/src/trace_processor/metrics/android/display_metrics.sql
+++ b/src/trace_processor/metrics/android/display_metrics.sql
@@ -24,10 +24,18 @@
 FROM counters
 WHERE name='SAME_FRAME' AND value=0;
 
+CREATE VIEW dpu_underrun AS
+SELECT COUNT(name) AS total_dpu_underrun_count
+FROM counters
+WHERE name='DPU_UNDERRUN'
+AND value=1;
+
 CREATE VIEW display_metrics_output AS
 SELECT AndroidDisplayMetrics(
     'total_duplicate_frames', (SELECT total_duplicate_frames
                             FROM same_frame),
     'duplicate_frames_logged', (SELECT logs_found
-                            FROM duplicate_frames_logged)
-);
\ No newline at end of file
+                            FROM duplicate_frames_logged),
+    'total_dpu_underrun_count', (SELECT total_dpu_underrun_count
+                            FROM dpu_underrun)
+);
diff --git a/src/trace_processor/metrics/metrics.cc b/src/trace_processor/metrics/metrics.cc
index dfd5df6..3e7ac8f 100644
--- a/src/trace_processor/metrics/metrics.cc
+++ b/src/trace_processor/metrics/metrics.cc
@@ -588,8 +588,9 @@
     std::string buffer;
     int ret = TemplateReplace(query, substitutions, &buffer);
     if (ret) {
-      sqlite3_result_error(
-          ctx, "RUN_METRIC: Error when performing substitution", -1);
+      char* error = sqlite3_mprintf(
+          "RUN_METRIC: Error when performing substitutions: %s", query.c_str());
+      sqlite3_result_error(ctx, error, -1);
       return;
     }
 
diff --git a/src/trace_processor/python/perfetto/trace_processor/metrics.descriptor b/src/trace_processor/python/perfetto/trace_processor/metrics.descriptor
index 9ae40bd..8e1ba99 100644
--- a/src/trace_processor/python/perfetto/trace_processor/metrics.descriptor
+++ b/src/trace_processor/python/perfetto/trace_processor/metrics.descriptor
Binary files differ