aboutsummaryrefslogtreecommitdiff
path: root/src/trace_processor/metrics/android/unmapped_java_symbols.sql
blob: 1b7f829fae179caf95a275d3673842525286b29d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
--
-- Copyright 2020 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.
--

SELECT RUN_METRIC('android/process_metadata.sql');

CREATE TABLE IF NOT EXISTS types_per_upid AS
WITH distinct_unmapped_type_names AS (
  SELECT DISTINCT upid, type_name
  FROM (
    SELECT
      upid,
      RTRIM(REPLACE(c.name, 'java.lang.Class<', ''), '[]>') AS type_name
    FROM heap_graph_object o JOIN heap_graph_class c ON o.type_id = c.id
    WHERE c.deobfuscated_name IS NULL
  )
  WHERE type_name NOT IN ('byte', 'char', 'short', 'int', 'long', 'boolean', 'float', 'double')
  AND type_name NOT LIKE '$Proxy%'
  AND type_name NOT LIKE 'java.%'
  AND type_name NOT LIKE 'javax.%'
  AND type_name NOT LIKE 'j$.%'
  AND type_name NOT LIKE 'android.%'
  AND type_name NOT LIKE 'com.android.%'
  AND type_name NOT LIKE 'sun.%'
  AND type_name NOT LIKE 'dalvik.%'
  AND type_name NOT LIKE 'libcore.%'
  AND LENGTH(type_name) > 0
)
SELECT upid, RepeatedField(type_name) AS types
FROM distinct_unmapped_type_names GROUP BY 1;

CREATE TABLE IF NOT EXISTS fields_per_upid AS
WITH distinct_unmapped_field_names AS (
  SELECT DISTINCT o.upid, field_type_name, field_name
    FROM heap_graph_object o JOIN heap_graph_class c ON o.type_id = c.id
           JOIN heap_graph_reference USING (reference_set_id)
  WHERE c.deobfuscated_name IS NULL
  AND field_name NOT LIKE '$Proxy%'
  AND field_name NOT LIKE 'java.%'
  AND field_name NOT LIKE 'javax.%'
  AND field_name NOT LIKE 'j$.%'
  AND field_name NOT LIKE 'android.%'
  AND field_name NOT LIKE 'com.android.%'
  AND field_name NOT LIKE 'sun.%'
  AND field_name NOT LIKE 'dalvik.%'
  AND field_name NOT LIKE 'libcore.%'
  AND LENGTH(field_name) > 0
)
SELECT upid, RepeatedField(
  UnmappedJavaSymbols_Field(
    'field_name', field_name,
    'field_type_name', field_type_name)) AS fields
FROM distinct_unmapped_field_names GROUP BY 1;

CREATE VIEW IF NOT EXISTS java_symbols_per_process AS
SELECT UnmappedJavaSymbols_ProcessSymbols(
  'process_metadata', metadata,
  'type_name', types,
  'field', fields
) types
FROM types_per_upid
JOIN process_metadata USING (upid)
LEFT JOIN fields_per_upid USING (upid);

CREATE VIEW unmapped_java_symbols_output AS
SELECT UnmappedJavaSymbols(
  'process_symbols',
  (SELECT RepeatedField(types) FROM java_symbols_per_process)
);