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;