Merge "Fix battery aggregates."
diff --git a/Android.bp b/Android.bp
index d3b7f3f..4ef5602 100644
--- a/Android.bp
+++ b/Android.bp
@@ -34,6 +34,7 @@
     "src/trace_processor/metrics/android/android_task_names.sql",
     "src/trace_processor/metrics/android/android_task_state.sql",
     "src/trace_processor/metrics/android/android_thread_time_in_state.sql",
+    "src/trace_processor/metrics/android/counter_span_view.sql",
     "src/trace_processor/metrics/android/cpu_info.sql",
     "src/trace_processor/metrics/android/display_metrics.sql",
     "src/trace_processor/metrics/android/heap_profile_callsites.sql",
@@ -41,6 +42,7 @@
     "src/trace_processor/metrics/android/java_heap_histogram.sql",
     "src/trace_processor/metrics/android/java_heap_stats.sql",
     "src/trace_processor/metrics/android/mem_stats_priority_breakdown.sql",
+    "src/trace_processor/metrics/android/process_counter_span_view.sql",
     "src/trace_processor/metrics/android/process_mem.sql",
     "src/trace_processor/metrics/android/process_metadata.sql",
     "src/trace_processor/metrics/android/process_oom_score.sql",
@@ -48,7 +50,6 @@
     "src/trace_processor/metrics/android/span_view_stats.sql",
     "src/trace_processor/metrics/android/unmapped_java_symbols.sql",
     "src/trace_processor/metrics/android/unsymbolized_frames.sql",
-    "src/trace_processor/metrics/android/upid_span_view.sql",
     "src/trace_processor/metrics/chrome/chrome_processes.sql",
     "src/trace_processor/metrics/trace_metadata.sql",
   ],
diff --git a/BUILD b/BUILD
index e32422d..9b74aff 100644
--- a/BUILD
+++ b/BUILD
@@ -755,6 +755,7 @@
         "src/trace_processor/metrics/android/android_task_names.sql",
         "src/trace_processor/metrics/android/android_task_state.sql",
         "src/trace_processor/metrics/android/android_thread_time_in_state.sql",
+        "src/trace_processor/metrics/android/counter_span_view.sql",
         "src/trace_processor/metrics/android/cpu_info.sql",
         "src/trace_processor/metrics/android/display_metrics.sql",
         "src/trace_processor/metrics/android/heap_profile_callsites.sql",
@@ -762,6 +763,7 @@
         "src/trace_processor/metrics/android/java_heap_histogram.sql",
         "src/trace_processor/metrics/android/java_heap_stats.sql",
         "src/trace_processor/metrics/android/mem_stats_priority_breakdown.sql",
+        "src/trace_processor/metrics/android/process_counter_span_view.sql",
         "src/trace_processor/metrics/android/process_mem.sql",
         "src/trace_processor/metrics/android/process_metadata.sql",
         "src/trace_processor/metrics/android/process_oom_score.sql",
@@ -769,7 +771,6 @@
         "src/trace_processor/metrics/android/span_view_stats.sql",
         "src/trace_processor/metrics/android/unmapped_java_symbols.sql",
         "src/trace_processor/metrics/android/unsymbolized_frames.sql",
-        "src/trace_processor/metrics/android/upid_span_view.sql",
         "src/trace_processor/metrics/chrome/chrome_processes.sql",
         "src/trace_processor/metrics/trace_metadata.sql",
     ],
diff --git a/src/trace_processor/metrics/BUILD.gn b/src/trace_processor/metrics/BUILD.gn
index 01649da..28a121e 100644
--- a/src/trace_processor/metrics/BUILD.gn
+++ b/src/trace_processor/metrics/BUILD.gn
@@ -45,7 +45,8 @@
   "android/process_oom_score.sql",
   "android/mem_stats_priority_breakdown.sql",
   "android/span_view_stats.sql",
-  "android/upid_span_view.sql",
+  "android/process_counter_span_view.sql",
+  "android/counter_span_view.sql",
   "android/unmapped_java_symbols.sql",
   "android/unsymbolized_frames.sql",
   "chrome/chrome_processes.sql",
diff --git a/src/trace_processor/metrics/android/android_batt.sql b/src/trace_processor/metrics/android/android_batt.sql
index 94c92a6..e44bec3 100644
--- a/src/trace_processor/metrics/android/android_batt.sql
+++ b/src/trace_processor/metrics/android/android_batt.sql
@@ -52,7 +52,7 @@
 ) USING(ts)
 ORDER BY ts;
 
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/counter_span_view.sql',
   'table_name', 'screen_state',
   'counter_name', 'ScreenState');
 
diff --git a/src/trace_processor/metrics/android/counter_span_view.sql b/src/trace_processor/metrics/android/counter_span_view.sql
new file mode 100644
index 0000000..cdd953a
--- /dev/null
+++ b/src/trace_processor/metrics/android/counter_span_view.sql
@@ -0,0 +1,25 @@
+--
+-- 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.
+--
+
+CREATE VIEW IF NOT EXISTS {{table_name}}_span AS
+SELECT
+  ts,
+  LEAD(ts, 1, (SELECT end_ts + 1 FROM trace_bounds))
+      OVER(PARTITION BY track_id ORDER BY ts) - ts AS dur,
+  value AS {{table_name}}_val
+FROM counter c JOIN counter_track t
+  ON t.id = c.track_id
+WHERE name = '{{counter_name}}';
diff --git a/src/trace_processor/metrics/android/upid_span_view.sql b/src/trace_processor/metrics/android/process_counter_span_view.sql
similarity index 92%
rename from src/trace_processor/metrics/android/upid_span_view.sql
rename to src/trace_processor/metrics/android/process_counter_span_view.sql
index 471e71e..2853f62 100644
--- a/src/trace_processor/metrics/android/upid_span_view.sql
+++ b/src/trace_processor/metrics/android/process_counter_span_view.sql
@@ -14,9 +14,7 @@
 -- limitations under the License.
 --
 
-DROP VIEW IF EXISTS {{table_name}}_span;
-
-CREATE VIEW {{table_name}}_span AS
+CREATE VIEW IF NOT EXISTS {{table_name}}_span AS
 SELECT
   ts,
   LEAD(ts, 1, (
diff --git a/src/trace_processor/metrics/android/process_mem.sql b/src/trace_processor/metrics/android/process_mem.sql
index fa07a9d..a51a78a 100644
--- a/src/trace_processor/metrics/android/process_mem.sql
+++ b/src/trace_processor/metrics/android/process_mem.sql
@@ -16,21 +16,21 @@
 
 -- Create all the views used to generate the Android Memory metrics proto.
 -- Anon RSS
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
   'table_name', 'anon_rss',
   'counter_name', 'mem.rss.anon');
 
 -- File RSS
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
   'table_name', 'file_rss',
   'counter_name', 'mem.rss.file');
 
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
   'table_name', 'shmem_rss',
   'counter_name', 'mem.rss.shmem');
 
 -- Swap
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
   'table_name', 'swap',
   'counter_name', 'mem.swap');
 
@@ -80,7 +80,7 @@
 FROM rss_and_swap_join;
 
 -- If we have dalvik events enabled (for ART trace points) we can construct the java heap timeline.
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
   'table_name', 'java_heap_kb',
   'counter_name', 'Heap size (KB)');