blob: 6154f00afc4a1e305e8a97ffedef7dfdcee19f9b [file] [log] [blame]
--
-- 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.
--
-- Count packages by package UID.
CREATE TABLE internal_uid_package_count AS
SELECT uid, COUNT(1) AS cnt
FROM package_list
GROUP BY 1;
-- Data about packages running on the process.
--
-- @column upid Process upid.
-- @column process_name Process name.
-- @column package_name Name of the packages running in this process.
-- @column version_code Package version code.
-- @column debuggable Whether package is debuggable.
CREATE TABLE android_process_metadata AS
SELECT
process.upid,
-- workaround for b/169226092: the bug has been fixed it Android T, but
-- we support ingesting traces from older Android versions.
CASE
-- cmdline gets rewritten after fork, if these are still there we must
-- have seen a racy capture.
WHEN length(process.name) = 15 AND (
process.cmdline IN ('zygote', 'zygote64', '<pre-initialized>')
OR process.cmdline GLOB '*' || process.name)
THEN process.cmdline
ELSE process.name
END AS process_name,
process.android_appid AS uid,
CASE WHEN internal_uid_package_count.cnt > 1 THEN TRUE ELSE NULL END AS shared_uid,
plist.package_name,
plist.version_code,
plist.debuggable
FROM process
LEFT JOIN internal_uid_package_count ON process.android_appid = internal_uid_package_count.uid
LEFT JOIN package_list plist
ON (
(
process.android_appid = plist.uid
AND internal_uid_package_count.uid = plist.uid
AND (
-- unique match
internal_uid_package_count.cnt = 1
-- or process name starts with the package name
OR process.name GLOB plist.package_name || '*')
)
OR
(
-- isolated processes can only be matched based on the name prefix
process.android_appid >= 90000 AND process.android_appid < 100000
AND STR_SPLIT(process.name, ':', 0) GLOB plist.package_name || '*'
)
);