Refactor: define oom_score_adj span once

Introduce new process_oom_score.adj that defines oom_score_span view
that can be used by android_lmk.sql and process_mem.sql.

Bug: 144281172
Change-Id: I1a91b29a309349994e6ee45c1bf9ea7fa7427cd5
diff --git a/Android.bp b/Android.bp
index 2c974c1..49b651e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -36,6 +36,7 @@
     "src/trace_processor/metrics/android/mem_stats_priority_breakdown.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",
     "src/trace_processor/metrics/android/process_unagg_mem_view.sql",
     "src/trace_processor/metrics/android/span_view_stats.sql",
     "src/trace_processor/metrics/android/unsymbolized_frames.sql",
diff --git a/BUILD b/BUILD
index b1be444..5c820db 100644
--- a/BUILD
+++ b/BUILD
@@ -598,6 +598,7 @@
         "src/trace_processor/metrics/android/mem_stats_priority_breakdown.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",
         "src/trace_processor/metrics/android/process_unagg_mem_view.sql",
         "src/trace_processor/metrics/android/span_view_stats.sql",
         "src/trace_processor/metrics/android/unsymbolized_frames.sql",
diff --git a/src/trace_processor/metrics/BUILD.gn b/src/trace_processor/metrics/BUILD.gn
index a5b92bc..2c3416b 100644
--- a/src/trace_processor/metrics/BUILD.gn
+++ b/src/trace_processor/metrics/BUILD.gn
@@ -35,6 +35,7 @@
   "android/process_unagg_mem_view.sql",
   "android/process_mem.sql",
   "android/process_metadata.sql",
+  "android/process_oom_score.sql",
   "android/mem_stats_priority_breakdown.sql",
   "android/span_view_stats.sql",
   "android/upid_span_view.sql",
diff --git a/src/trace_processor/metrics/android/android_lmk.sql b/src/trace_processor/metrics/android/android_lmk.sql
index 621d07f..7ddd2ea 100644
--- a/src/trace_processor/metrics/android/android_lmk.sql
+++ b/src/trace_processor/metrics/android/android_lmk.sql
@@ -14,6 +14,8 @@
 -- limitations under the License.
 --
 
+SELECT RUN_METRIC('android/process_oom_score.sql');
+
 -- Create all the views used to for LMK related stuff.
 CREATE TABLE lmk_events AS
 SELECT ref AS upid, MIN(ts) AS ts
@@ -21,24 +23,13 @@
 WHERE name = 'mem.lmk' AND ref_type = 'upid'
 GROUP BY 1;
 
-CREATE VIEW oom_scores AS
-SELECT
-  ts,
-  LEAD(ts, 1, (SELECT end_ts + 1 FROM trace_bounds))
-    OVER(PARTITION BY track_id ORDER BY ts) AS ts_end,
-  upid,
-  value AS score
-FROM counter c JOIN process_counter_track t
-  ON c.track_id = t.id
-WHERE name = 'oom_score_adj' AND upid IS NOT NULL;
-
 CREATE VIEW lmk_by_score AS
-SELECT lmk_events.upid, CAST(oom_scores.score AS INT) AS score
+SELECT lmk_events.upid, oom_scores.oom_score_val AS score
 FROM lmk_events
-LEFT JOIN oom_scores
+LEFT JOIN oom_score_span oom_scores
   ON (lmk_events.upid = oom_scores.upid AND
       lmk_events.ts >= oom_scores.ts AND
-      lmk_events.ts < oom_scores.ts_end)
+      lmk_events.ts < oom_scores.ts + oom_scores.dur)
 ORDER BY lmk_events.upid;
 
 CREATE VIEW lmk_counts AS
diff --git a/src/trace_processor/metrics/android/process_mem.sql b/src/trace_processor/metrics/android/process_mem.sql
index 6ff2353..ca0499f 100644
--- a/src/trace_processor/metrics/android/process_mem.sql
+++ b/src/trace_processor/metrics/android/process_mem.sql
@@ -30,6 +30,9 @@
   'table_name', 'swap',
   'counter_name', 'mem.swap');
 
+-- OOM score
+SELECT RUN_METRIC('android/process_oom_score.sql');
+
 -- Anon RSS + Swap
 DROP TABLE IF EXISTS anon_and_swap_join;
 
@@ -55,20 +58,6 @@
 SELECT ts, dur, upid, java_heap_kb_val * 1024 AS java_heap_val
 FROM java_heap_kb_span;
 
--- Create a track for process OOM scores.
-DROP VIEW IF EXISTS oom_score_span;
-
-CREATE VIEW oom_score_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,
-  upid,
-  CAST(value AS INT) AS oom_score_val
-FROM counter c JOIN process_counter_track t
-  ON c.track_id = t.id
-WHERE name = 'oom_score_adj' AND upid IS NOT NULL;
-
 DROP TABLE IF EXISTS anon_rss_by_oom_span;
 
 CREATE VIRTUAL TABLE anon_rss_by_oom_span
diff --git a/src/trace_processor/metrics/android/process_oom_score.sql b/src/trace_processor/metrics/android/process_oom_score.sql
new file mode 100644
index 0000000..ee9a64f
--- /dev/null
+++ b/src/trace_processor/metrics/android/process_oom_score.sql
@@ -0,0 +1,29 @@
+--
+-- Copyright 2019 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 a track for process OOM scores.
+DROP VIEW IF EXISTS oom_score_span;
+
+CREATE VIEW oom_score_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,
+  upid,
+  CAST(value AS INT) AS oom_score_val
+FROM counter c JOIN process_counter_track t
+  ON c.track_id = t.id
+WHERE name = 'oom_score_adj' AND upid IS NOT NULL;