• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--
2-- Copyright 2019 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--
16
17DROP VIEW IF EXISTS ion_timeline;
18CREATE PERFETTO VIEW ion_timeline AS
19SELECT
20  ts,
21  LEAD(ts, 1, trace_end())
22  OVER(PARTITION BY track_id ORDER BY ts) - ts AS dur,
23  CASE name
24    WHEN 'mem.ion' THEN 'all'
25    ELSE SUBSTR(name, 9)
26  END AS heap_name,
27  track_id,
28  value
29FROM counter JOIN counter_track
30  ON counter.track_id = counter_track.id
31WHERE (name GLOB 'mem.ion.*' OR name = 'mem.ion');
32
33DROP VIEW IF EXISTS ion_heap_stats;
34CREATE PERFETTO VIEW ion_heap_stats AS
35SELECT
36  heap_name,
37  SUM(value * dur) / SUM(dur) AS avg_size,
38  MIN(value) AS min_size,
39  MAX(value) AS max_size
40FROM ion_timeline
41GROUP BY 1;
42
43DROP VIEW IF EXISTS ion_raw_allocs;
44CREATE PERFETTO VIEW ion_raw_allocs AS
45SELECT
46  CASE name
47    WHEN 'mem.ion_change' THEN 'all'
48    ELSE SUBSTR(name, 16)
49  END AS heap_name,
50  ts,
51  value AS instant_value,
52  SUM(value) OVER win AS value
53FROM counter c JOIN thread_counter_track t ON c.track_id = t.id
54WHERE (name GLOB 'mem.ion_change.*' OR name = 'mem.ion_change') AND value > 0
55WINDOW win AS (
56  PARTITION BY name ORDER BY ts
57  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
58);
59
60DROP VIEW IF EXISTS ion_alloc_stats;
61CREATE PERFETTO VIEW ion_alloc_stats AS
62SELECT
63  heap_name,
64  SUM(instant_value) AS total_alloc_size_bytes
65FROM ion_raw_allocs
66GROUP BY 1;
67
68DROP VIEW IF EXISTS android_ion_output;
69CREATE PERFETTO VIEW android_ion_output AS
70SELECT AndroidIonMetric(
71  'buffer', RepeatedField(
72    AndroidIonMetric_Buffer(
73      'name', heap_name,
74      'avg_size_bytes', avg_size,
75      'min_size_bytes', min_size,
76      'max_size_bytes', max_size,
77      'total_alloc_size_bytes', total_alloc_size_bytes
78    )
79  ))
80FROM ion_heap_stats JOIN ion_alloc_stats USING (heap_name);
81