• 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
16SELECT RUN_METRIC('android/process_metadata.sql');
17
18INCLUDE PERFETTO MODULE android.slices;
19INCLUDE PERFETTO MODULE android.binder;
20INCLUDE PERFETTO MODULE android.critical_blocking_calls;
21
22DROP TABLE IF EXISTS process_info;
23CREATE TABLE process_info AS
24SELECT
25  process.upid AS upid,
26  process.name AS process_name,
27  process_metadata.metadata AS process_metadata
28FROM process
29JOIN process_metadata USING (upid);
30
31DROP TABLE IF EXISTS android_blocking_calls_unagg_calls;
32CREATE TABLE android_blocking_calls_unagg_calls AS
33SELECT
34  name,
35  COUNT(*) AS occurrences,
36  MAX(dur) AS max_dur_ns,
37  MIN(dur) AS min_dur_ns,
38  SUM(dur) AS total_dur_ns,
39  AVG(dur) AS avg_dur_ns,
40  upid,
41  process_name
42FROM
43  _android_critical_blocking_calls
44GROUP BY name, upid, process_name;
45
46DROP TABLE IF EXISTS filtered_processes_with_non_zero_blocking_calls;
47CREATE TABLE filtered_processes_with_non_zero_blocking_calls AS
48SELECT pi.upid,
49  pi.process_name,
50  pi.process_metadata
51FROM process_info pi WHERE pi.upid IN
52  (SELECT DISTINCT upid FROM _android_critical_blocking_calls);
53
54
55DROP TABLE IF EXISTS filtered_processes_with_non_zero_blocking_calls;
56CREATE TABLE filtered_processes_with_non_zero_blocking_calls AS
57SELECT pi.upid,
58  pi.process_name,
59  pi.process_metadata
60FROM process_info pi WHERE pi.upid IN
61  (SELECT DISTINCT upid FROM _android_critical_blocking_calls);
62
63DROP VIEW IF EXISTS android_blocking_calls_unagg_output;
64CREATE PERFETTO VIEW android_blocking_calls_unagg_output AS
65SELECT AndroidBlockingCallsUnagg(
66  'process_with_blocking_calls', (
67     SELECT RepeatedField(
68       AndroidBlockingCallsUnagg_ProcessWithBlockingCalls(
69         'process', e.process_metadata,
70         'blocking_calls', (
71            SELECT RepeatedField(
72              AndroidBlockingCall(
73                'name', d.name,
74                'cnt', d.occurrences,
75                'avg_dur_ms', CAST(avg_dur_ns / 1e6 AS INT),
76                'total_dur_ms', CAST(total_dur_ns / 1e6 AS INT),
77                'max_dur_ms', CAST(max_dur_ns / 1e6 AS INT),
78                'min_dur_ms', CAST(min_dur_ns / 1e6 AS INT),
79                'avg_dur_ns', CAST(d.avg_dur_ns AS INT),
80                'total_dur_ns', d.total_dur_ns,
81                'max_dur_ns', d.max_dur_ns,
82                'min_dur_ns', d.min_dur_ns
83              )
84            ) FROM (
85            SELECT b.name,
86              b.occurrences,
87              b.avg_dur_ns,
88              b.total_dur_ns,
89              b.max_dur_ns,
90              b.min_dur_ns
91            FROM android_blocking_calls_unagg_calls b INNER JOIN filtered_processes_with_non_zero_blocking_calls c
92            ON b.upid = c.upid WHERE b.upid = e.upid
93            ORDER BY total_dur_ns DESC
94            ) d
95         )
96       )
97     )
98     FROM filtered_processes_with_non_zero_blocking_calls e
99  )
100);
101