• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--
2-- Copyright 2024 The Android Open Source Project
3--
4-- Licensed under the Apache License, Version 2.0 (the "License");
5-- you may not use this file except in compliance with the License.
6-- You may obtain a copy of the License at
7--
8--     https://www.apache.org/licenses/LICENSE-2.0
9--
10-- Unless required by applicable law or agreed to in writing, software
11-- distributed under the License is distributed on an "AS IS" BASIS,
12-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-- See the License for the specific language governing permissions and
14-- limitations under the License.
15--
16INCLUDE PERFETTO MODULE android.oom_adjuster;
17
18DROP VIEW IF EXISTS android_oom_adj_intervals_with_detailed_bucket_name;
19CREATE PERFETTO VIEW android_oom_adj_intervals_with_detailed_bucket_name (
20  -- Timestamp the oom_adj score of the process changed
21  ts INT,
22  -- Duration until the next oom_adj score change of the process.
23  dur INT,
24  -- oom_adj score of the process.
25  score INT,
26  -- oom_adj bucket of the process.
27  bucket STRING,
28  -- Upid of the process having an oom_adj update.
29  upid INT,
30  -- Name of the process having an oom_adj update.
31  process_name STRING,
32  -- Slice id of the latest oom_adj update in the system_server.
33  oom_adj_id INT,
34  -- Timestamp of the latest oom_adj update in the system_server.
35  oom_adj_ts INT,
36  -- Duration of the latest oom_adj update in the system_server.
37  oom_adj_dur INT,
38  -- Track id of the latest oom_adj update in the system_server
39  oom_adj_track_id INT,
40  -- Thread name of the latest oom_adj update in the system_server.
41  oom_adj_thread_name STRING,
42  -- Reason for the latest oom_adj update in the system_server.
43  oom_adj_reason STRING,
44  -- Trigger for the latest oom_adj update in the system_server.
45  oom_adj_trigger STRING
46  ) AS
47SELECT
48  ts,
49  dur,
50  score,
51  android_oom_adj_score_to_detailed_bucket_name(score, android_appid) AS bucket,
52  upid,
53  process_name,
54  oom_adj_id,
55  oom_adj_ts,
56  oom_adj_dur,
57  oom_adj_track_id,
58  oom_adj_thread_name,
59  oom_adj_reason,
60  oom_adj_trigger
61FROM _oom_adjuster_intervals;
62
63DROP TABLE IF EXISTS _oom_adj_events_with_src_bucket;
64CREATE PERFETTO TABLE _oom_adj_events_with_src_bucket
65AS
66SELECT
67  LAG(bucket) OVER (PARTITION BY upid ORDER BY ts) AS src_bucket,
68  ts,
69  bucket,
70  process_name,
71  oom_adj_reason
72FROM android_oom_adj_intervals_with_detailed_bucket_name;
73
74DROP VIEW IF EXISTS oom_adj_events_by_process_name;
75CREATE PERFETTO VIEW oom_adj_events_by_process_name AS
76SELECT
77  src_bucket,
78  bucket,
79  count(ts) as count,
80  process_name
81FROM _oom_adj_events_with_src_bucket
82GROUP BY process_name, bucket, src_bucket;
83
84DROP VIEW IF EXISTS oom_adj_events_global_by_bucket;
85CREATE PERFETTO VIEW oom_adj_events_global_by_bucket AS
86SELECT
87  src_bucket,
88  bucket,
89  count(ts) as count,
90  NULL as name
91FROM _oom_adj_events_with_src_bucket
92GROUP BY bucket, src_bucket;
93
94DROP VIEW IF EXISTS oom_adj_events_by_oom_adj_reason;
95CREATE PERFETTO VIEW oom_adj_events_by_oom_adj_reason AS
96SELECT
97  src_bucket,
98  bucket,
99  count(ts) as count,
100  oom_adj_reason as name
101FROM _oom_adj_events_with_src_bucket
102GROUP BY bucket, src_bucket, oom_adj_reason;
103
104DROP VIEW IF EXISTS android_oom_adjuster_output;
105CREATE PERFETTO VIEW android_oom_adjuster_output AS
106SELECT AndroidOomAdjusterMetric(
107  'oom_adjuster_transition_counts_by_process', (
108    SELECT RepeatedField(
109      AndroidOomAdjusterMetric_OomAdjusterTransitionCounts(
110        'name', process_name,
111        'src_bucket', src_bucket,
112        'dest_bucket', bucket,
113        'count', count
114      )
115    ) FROM oom_adj_events_by_process_name
116  ),
117  'oom_adjuster_transition_counts_global', (
118    SELECT RepeatedField(
119      AndroidOomAdjusterMetric_OomAdjusterTransitionCounts(
120        'name', name,
121        'src_bucket', src_bucket,
122        'dest_bucket', bucket,
123        'count', count
124      )
125    )
126    FROM oom_adj_events_global_by_bucket
127  ),
128  'oom_adjuster_transition_counts_by_oom_adj_reason',(
129    SELECT RepeatedField(
130      AndroidOomAdjusterMetric_OomAdjusterTransitionCounts(
131        'name', name,
132        'src_bucket', src_bucket,
133        'dest_bucket', bucket,
134        'count', count
135      )
136    )
137    FROM oom_adj_events_by_oom_adj_reason
138  ),
139  'oom_adj_bucket_duration_agg_global',(SELECT RepeatedField(
140    AndroidOomAdjusterMetric_OomAdjBucketDurationAggregation(
141          'name', name,
142          'bucket', bucket,
143          'total_dur', total_dur
144        )
145    )
146    FROM (
147        SELECT NULL as name, bucket, SUM(dur) as total_dur
148        FROM android_oom_adj_intervals_with_detailed_bucket_name GROUP BY bucket
149    )
150  ),
151  'oom_adj_bucket_duration_agg_by_process',(SELECT RepeatedField(
152      AndroidOomAdjusterMetric_OomAdjBucketDurationAggregation(
153          'name', name,
154          'bucket', bucket,
155          'total_dur', total_dur
156      )
157    )
158    FROM (
159      SELECT process_name as name, bucket, SUM(dur) as total_dur
160      FROM android_oom_adj_intervals_with_detailed_bucket_name
161      WHERE process_name IS NOT NULL
162      GROUP BY process_name, bucket
163    )
164  ),
165  'oom_adj_duration_agg', (SELECT RepeatedField(
166      AndroidOomAdjusterMetric_OomAdjDurationAggregation(
167          'min_oom_adj_dur', min_oom_adj_dur,
168          'max_oom_adj_dur', max_oom_adj_dur,
169          'avg_oom_adj_dur', avg_oom_adj_dur,
170          'oom_adj_event_count', oom_adj_event_count,
171          'oom_adj_reason', oom_adj_reason
172      )
173    )
174    FROM (
175      SELECT
176        MIN(oom_adj_dur) as min_oom_adj_dur,
177        MAX(oom_adj_dur) as max_oom_adj_dur,
178        AVG(oom_adj_dur) as avg_oom_adj_dur,
179        COUNT(DISTINCT(oom_adj_id)) oom_adj_event_count,
180        oom_adj_reason
181      FROM android_oom_adj_intervals_with_detailed_bucket_name GROUP BY oom_adj_reason
182    )
183  )
184);
185