aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLalit Maganti <lalitm@google.com>2024-05-17 18:23:59 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-17 18:23:59 +0000
commit0e0f5e3a30388f5c9a367f2e5f07678cf42df8f1 (patch)
treec473e4aae7ddc478cb874ede1c04f16ed6b1802f
parent80c24fb3a9ca26fbda91d94918199d741d26e85a (diff)
parent4bfe5efef9145da1bfaf49d97f56258cd2c462a2 (diff)
downloadperfetto-0e0f5e3a30388f5c9a367f2e5f07678cf42df8f1.tar.gz
Merge "tp: make process <-> package association take the "closest" package" into main
-rw-r--r--src/trace_processor/perfetto_sql/stdlib/android/process_metadata.sql62
1 files changed, 44 insertions, 18 deletions
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/process_metadata.sql b/src/trace_processor/perfetto_sql/stdlib/android/process_metadata.sql
index a50b03306..a3d47f276 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/process_metadata.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/android/process_metadata.sql
@@ -20,6 +20,47 @@ SELECT uid, COUNT(1) AS cnt
FROM package_list
GROUP BY 1;
+CREATE PERFETTO FUNCTION _android_package_for_process(
+ uid INT,
+ uid_count INT,
+ process_name STRING
+)
+RETURNS TABLE(
+ package_name STRING,
+ version_code INT,
+ debuggable BOOL
+)
+AS
+WITH min_distance AS (
+ SELECT
+ -- SQLite allows omitting the group-by for the MIN: the other columns
+ -- will match the row with the minimum value.
+ MIN(LENGTH($process_name) - LENGTH(package_name)),
+ package_name,
+ version_code,
+ debuggable
+ FROM package_list
+ WHERE (
+ (
+ $uid = uid
+ AND (
+ -- unique match
+ $uid_count = 1
+ -- or process name is a prefix the package name
+ OR $process_name GLOB package_name || '*'
+ )
+ )
+ OR
+ (
+ -- isolated processes can only be matched based on the name
+ $uid >= 90000 AND $uid < 100000
+ AND STR_SPLIT($process_name, ':', 0) GLOB package_name || '*'
+ )
+ )
+)
+SELECT package_name, version_code, debuggable
+FROM min_distance;
+
-- Data about packages running on the process.
CREATE PERFETTO TABLE android_process_metadata(
-- Process upid.
@@ -57,21 +98,6 @@ SELECT
plist.debuggable
FROM process
LEFT JOIN _uid_package_count ON process.android_appid = _uid_package_count.uid
-LEFT JOIN package_list plist
- ON (
- (
- process.android_appid = plist.uid
- AND _uid_package_count.uid = plist.uid
- AND (
- -- unique match
- _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
- process.android_appid >= 90000 AND process.android_appid < 100000
- AND STR_SPLIT(process.name, ':', 0) = plist.package_name
- )
- );
+LEFT JOIN _android_package_for_process(
+ process.android_appid, _uid_package_count.cnt, process.name
+) AS plist;