Merge "stdlib: OOM score" into main
diff --git a/src/trace_processor/metrics/sql/android/android_boot.sql b/src/trace_processor/metrics/sql/android/android_boot.sql
index 9140387..5738bff 100644
--- a/src/trace_processor/metrics/sql/android/android_boot.sql
+++ b/src/trace_processor/metrics/sql/android/android_boot.sql
@@ -19,6 +19,24 @@
 INCLUDE PERFETTO MODULE android.garbage_collection;
 INCLUDE PERFETTO MODULE android.oom_adjuster;
 
+DROP VIEW IF EXISTS android_oom_adj_intervals_with_detailed_bucket_name;
+CREATE PERFETTO VIEW android_oom_adj_intervals_with_detailed_bucket_name AS
+SELECT
+  ts,
+  dur,
+  score,
+  android_oom_adj_score_to_detailed_bucket_name(score, android_appid) AS bucket,
+  upid,
+  process_name,
+  oom_adj_id,
+  oom_adj_ts,
+  oom_adj_dur,
+  oom_adj_track_id,
+  oom_adj_thread_name,
+  oom_adj_reason,
+  oom_adj_trigger
+FROM _oom_adjuster_intervals;
+
 CREATE OR REPLACE PERFETTO FUNCTION get_durations(process_name STRING)
 RETURNS TABLE(uint_sleep_dur LONG, total_dur LONG) AS
 SELECT
@@ -41,7 +59,7 @@
   bucket,
   process_name,
   oom_adj_reason
-FROM android_oom_adj_intervals;
+FROM android_oom_adj_intervals_with_detailed_bucket_name;
 
 DROP VIEW IF EXISTS oom_adj_events_by_process_name;
 CREATE PERFETTO VIEW oom_adj_events_by_process_name AS
@@ -280,7 +298,7 @@
           NULL as name,
           bucket,
           SUM(dur) as total_dur
-        FROM android_oom_adj_intervals
+        FROM android_oom_adj_intervals_with_detailed_bucket_name
           WHERE ts > first_user_unlocked()
         GROUP BY bucket)
     ),
@@ -296,7 +314,7 @@
         process_name as name,
         bucket,
         SUM(dur) as total_dur
-      FROM android_oom_adj_intervals
+      FROM android_oom_adj_intervals_with_detailed_bucket_name
       WHERE ts > first_user_unlocked()
       AND process_name IS NOT NULL
       GROUP BY process_name, bucket)
@@ -318,7 +336,7 @@
         AVG(oom_adj_dur) as avg_oom_adj_dur,
         COUNT(DISTINCT(oom_adj_id)) oom_adj_event_count,
         oom_adj_reason
-      FROM android_oom_adj_intervals
+      FROM android_oom_adj_intervals_with_detailed_bucket_name
       WHERE ts > first_user_unlocked()
       GROUP BY oom_adj_reason
     )
diff --git a/src/trace_processor/metrics/sql/android/android_oom_adjuster.sql b/src/trace_processor/metrics/sql/android/android_oom_adjuster.sql
index 7b752a8..1564586 100644
--- a/src/trace_processor/metrics/sql/android/android_oom_adjuster.sql
+++ b/src/trace_processor/metrics/sql/android/android_oom_adjuster.sql
@@ -15,6 +15,51 @@
 --
 INCLUDE PERFETTO MODULE android.oom_adjuster;
 
+DROP VIEW IF EXISTS android_oom_adj_intervals_with_detailed_bucket_name;
+CREATE PERFETTO VIEW android_oom_adj_intervals_with_detailed_bucket_name (
+  -- Timestamp the oom_adj score of the process changed
+  ts INT,
+  -- Duration until the next oom_adj score change of the process.
+  dur INT,
+  -- oom_adj score of the process.
+  score INT,
+  -- oom_adj bucket of the process.
+  bucket STRING,
+  -- Upid of the process having an oom_adj update.
+  upid INT,
+  -- Name of the process having an oom_adj update.
+  process_name STRING,
+  -- Slice id of the latest oom_adj update in the system_server.
+  oom_adj_id INT,
+  -- Timestamp of the latest oom_adj update in the system_server.
+  oom_adj_ts INT,
+  -- Duration of the latest oom_adj update in the system_server.
+  oom_adj_dur INT,
+  -- Track id of the latest oom_adj update in the system_server
+  oom_adj_track_id INT,
+  -- Thread name of the latest oom_adj update in the system_server.
+  oom_adj_thread_name STRING,
+  -- Reason for the latest oom_adj update in the system_server.
+  oom_adj_reason STRING,
+  -- Trigger for the latest oom_adj update in the system_server.
+  oom_adj_trigger STRING
+  ) AS
+SELECT
+  ts,
+  dur,
+  score,
+  android_oom_adj_score_to_detailed_bucket_name(score, android_appid) AS bucket,
+  upid,
+  process_name,
+  oom_adj_id,
+  oom_adj_ts,
+  oom_adj_dur,
+  oom_adj_track_id,
+  oom_adj_thread_name,
+  oom_adj_reason,
+  oom_adj_trigger
+FROM _oom_adjuster_intervals;
+
 DROP TABLE IF EXISTS _oom_adj_events_with_src_bucket;
 CREATE PERFETTO TABLE _oom_adj_events_with_src_bucket
 AS
@@ -24,7 +69,7 @@
   bucket,
   process_name,
   oom_adj_reason
-FROM android_oom_adj_intervals;
+FROM android_oom_adj_intervals_with_detailed_bucket_name;
 
 DROP VIEW IF EXISTS oom_adj_events_by_process_name;
 CREATE PERFETTO VIEW oom_adj_events_by_process_name AS
@@ -100,7 +145,7 @@
     )
     FROM (
         SELECT NULL as name, bucket, SUM(dur) as total_dur
-        FROM android_oom_adj_intervals GROUP BY bucket
+        FROM android_oom_adj_intervals_with_detailed_bucket_name GROUP BY bucket
     )
   ),
   'oom_adj_bucket_duration_agg_by_process',(SELECT RepeatedField(
@@ -112,7 +157,7 @@
     )
     FROM (
       SELECT process_name as name, bucket, SUM(dur) as total_dur
-      FROM android_oom_adj_intervals
+      FROM android_oom_adj_intervals_with_detailed_bucket_name
       WHERE process_name IS NOT NULL
       GROUP BY process_name, bucket
     )
@@ -133,7 +178,7 @@
         AVG(oom_adj_dur) as avg_oom_adj_dur,
         COUNT(DISTINCT(oom_adj_id)) oom_adj_event_count,
         oom_adj_reason
-      FROM android_oom_adj_intervals GROUP BY oom_adj_reason
+      FROM android_oom_adj_intervals_with_detailed_bucket_name GROUP BY oom_adj_reason
     )
   )
 );
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/oom_adjuster.sql b/src/trace_processor/perfetto_sql/stdlib/android/oom_adjuster.sql
index 3ce017e..10c39d1 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/oom_adjuster.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/android/oom_adjuster.sql
@@ -17,8 +17,30 @@
 INCLUDE PERFETTO MODULE slices.with_context;
 INCLUDE PERFETTO MODULE counters.intervals;
 
--- Converts an oom_adj score Integer to String bucket name.
+-- Converts an oom_adj score Integer to String sample name.
+-- One of: cached, background, job, foreground_service, bfgs, foreground and
+-- system.
 CREATE PERFETTO FUNCTION android_oom_adj_score_to_bucket_name(
+  -- `oom_score` value
+  oom_score INT
+)
+-- Returns the sample bucket based on the oom score.
+RETURNS STRING
+AS
+SELECT
+  CASE
+    WHEN $oom_score >= 900 THEN 'cached'
+    WHEN $oom_score BETWEEN 250 AND 900 THEN 'background'
+    WHEN $oom_score BETWEEN 201 AND 250 THEN 'job'
+    WHEN $oom_score = 200 THEN 'foreground_service'
+    WHEN $oom_score BETWEEN 100 AND 200 THEN 'bfgs'
+    WHEN $oom_score BETWEEN 0 AND 100 THEN 'foreground'
+    WHEN $oom_score < 0 THEN 'system'
+END;
+
+-- Converts an oom_adj score Integer to String bucket name.
+-- Deprecated: use `android_oom_adj_score_to_bucket_name` instead.
+CREATE PERFETTO FUNCTION android_oom_adj_score_to_detailed_bucket_name(
   -- oom_adj score.
   value INT,
   -- android_app id of the process.
@@ -52,8 +74,58 @@
     ELSE 'unknown_app'
   END;
 
+CREATE PERFETTO TABLE _oom_adjuster_intervals AS
+WITH reason AS (
+  SELECT
+    thread_slice.id AS oom_adj_id,
+    thread_slice.ts AS oom_adj_ts,
+    thread_slice.dur AS oom_adj_dur,
+    thread_slice.track_id AS oom_adj_track_id,
+    utid AS oom_adj_utid,
+    thread_name AS oom_adj_thread_name,
+    str_split(thread_slice.name, '_', 1) AS oom_adj_reason,
+    slice.name AS oom_adj_trigger,
+    LEAD(thread_slice.ts) OVER (ORDER BY thread_slice.ts) AS oom_adj_next_ts
+  FROM thread_slice
+  LEFT JOIN slice ON slice.id = thread_slice.parent_id AND slice.dur != -1
+  WHERE thread_slice.name GLOB 'updateOomAdj_*' AND process_name = 'system_server'
+)
+SELECT
+  ts,
+  dur,
+  value AS score,
+  process.upid,
+  process.name AS process_name,
+  reason.oom_adj_id,
+  reason.oom_adj_ts,
+  reason.oom_adj_dur,
+  reason.oom_adj_track_id,
+  reason.oom_adj_thread_name,
+  reason.oom_adj_utid,
+  reason.oom_adj_reason,
+  reason.oom_adj_trigger,
+  android_appid
+FROM
+  counter_leading_intervals
+    !(
+      (
+        SELECT counter.*
+        FROM counter
+        JOIN counter_track track
+          ON track.id = counter.track_id AND track.name = 'oom_score_adj'
+      ))
+      counter
+JOIN process_counter_track track
+  ON counter.track_id = track.id
+JOIN process
+  USING (upid)
+LEFT JOIN reason
+  ON counter.ts BETWEEN oom_adj_ts AND COALESCE(oom_adj_next_ts, trace_end())
+WHERE track.name = 'oom_score_adj';
+
+
 -- All oom adj state intervals across all processes along with the reason for the state update.
-CREATE PERFETTO TABLE android_oom_adj_intervals (
+CREATE PERFETTO VIEW android_oom_adj_intervals (
   -- Timestamp the oom_adj score of the process changed
   ts INT,
   -- Duration until the next oom_adj score change of the process.
@@ -81,49 +153,18 @@
   -- Trigger for the latest oom_adj update in the system_server.
   oom_adj_trigger STRING
   ) AS
-WITH
-  reason AS (
-    SELECT
-      thread_slice.id AS oom_adj_id,
-      thread_slice.ts AS oom_adj_ts,
-      thread_slice.dur AS oom_adj_dur,
-      thread_slice.track_id AS oom_adj_track_id,
-      thread_name AS oom_adj_thread_name,
-      str_split(thread_slice.name, '_', 1) AS oom_adj_reason,
-      slice.name AS oom_adj_trigger,
-      LEAD(thread_slice.ts) OVER (ORDER BY thread_slice.ts) AS oom_adj_next_ts
-    FROM thread_slice
-    LEFT JOIN slice ON slice.id = thread_slice.parent_id AND slice.dur != -1
-    WHERE thread_slice.name GLOB 'updateOomAdj_*' AND process_name = 'system_server'
-  )
 SELECT
   ts,
   dur,
-  value AS score,
-  android_oom_adj_score_to_bucket_name(value, android_appid) AS bucket,
-  process.upid,
-  process.name AS process_name,
-  reason.oom_adj_id,
-  reason.oom_adj_ts,
-  reason.oom_adj_dur,
-  reason.oom_adj_track_id,
-  reason.oom_adj_thread_name,
-  reason.oom_adj_reason,
-  reason.oom_adj_trigger
-FROM
-  counter_leading_intervals
-    !(
-      (
-        SELECT counter.*
-        FROM counter
-        JOIN counter_track track
-          ON track.id = counter.track_id AND track.name = 'oom_score_adj'
-      ))
-      counter
-JOIN process_counter_track track
-  ON counter.track_id = track.id
-JOIN process
-  USING (upid)
-LEFT JOIN reason
-  ON counter.ts BETWEEN oom_adj_ts AND COALESCE(oom_adj_next_ts, trace_end())
-WHERE track.name = 'oom_score_adj';
+  score,
+  android_oom_adj_score_to_bucket_name(score) AS bucket,
+  upid,
+  process_name,
+  oom_adj_id,
+  oom_adj_ts,
+  oom_adj_dur,
+  oom_adj_track_id,
+  oom_adj_thread_name,
+  oom_adj_reason,
+  oom_adj_trigger
+FROM _oom_adjuster_intervals;
diff --git a/src/trace_processor/perfetto_sql/stdlib/memory/BUILD.gn b/src/trace_processor/perfetto_sql/stdlib/memory/BUILD.gn
index da9685e..fd8c940 100644
--- a/src/trace_processor/perfetto_sql/stdlib/memory/BUILD.gn
+++ b/src/trace_processor/perfetto_sql/stdlib/memory/BUILD.gn
@@ -15,6 +15,6 @@
 import("../../../../../gn/perfetto_sql.gni")
 
 perfetto_sql_source_set("memory") {
-  deps = ["linux"]
+  deps = [ "linux" ]
   sources = [ "heap_graph_dominator_tree.sql" ]
 }
diff --git a/src/trace_processor/perfetto_sql/stdlib/memory/linux/process.sql b/src/trace_processor/perfetto_sql/stdlib/memory/linux/process.sql
index 8a81f43..42a52c6 100644
--- a/src/trace_processor/perfetto_sql/stdlib/memory/linux/process.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/memory/linux/process.sql
@@ -13,6 +13,8 @@
 -- See the License for the specific language governing permissions and
 -- limitations under the License.
 
+INCLUDE PERFETTO MODULE android.oom_adjuster;
+
 CREATE PERFETTO VIEW _all_counters_for_with_upid AS
 SELECT
   ts,
@@ -145,3 +147,85 @@
   anon_rss + file_rss  + COALESCE(shmem_rss, 0) + COALESCE(swap, 0) AS rss_and_swap
 FROM _memory_rss_and_swap_per_process_table
 JOIN process USING (upid);
+
+-- OOM score tables
+
+CREATE VIRTUAL TABLE _mem_ooms_sj
+USING SPAN_OUTER_JOIN(
+  android_oom_adj_intervals PARTITIONED upid,
+  _memory_rss_and_swap_per_process_table PARTITIONED upid);
+
+-- Process memory and it's OOM adjuster scores. Detects transitions, each new
+-- interval means that either the memory or OOM adjuster score of the process changed.
+CREATE PERFETTO TABLE memory_oom_score_with_rss_and_swap_per_process(
+  -- Timestamp the oom_adj score or memory of the process changed
+  ts INT,
+  -- Duration until the next oom_adj score or memory change of the process.
+  dur INT,
+  -- oom adjuster score of the process.
+  score INT,
+  -- oom adjuster bucket of the process.
+  bucket STRING,
+  -- Upid of the process having an oom_adj update.
+  upid INT,
+  -- Name of the process having an oom_adj update.
+  process_name STRING,
+  -- Pid of the process having an oom_adj update.
+  pid INT,
+  -- Slice of the latest oom_adj update in the system_server. Alias of
+  -- `slice.id`.
+  oom_adj_id INT,
+  -- Timestamp of the latest oom_adj update in the system_server.
+  oom_adj_ts INT,
+  -- Duration of the latest oom_adj update in the system_server.
+  oom_adj_dur INT,
+  -- Track of the latest oom_adj update in the system_server. Alias of
+  -- `track.id`.
+  oom_adj_track_id INT,
+  -- Thread name of the latest oom_adj update in the system_server.
+  oom_adj_thread_name STRING,
+  -- Reason for the latest oom_adj update in the system_server.
+  oom_adj_reason STRING,
+  -- Trigger for the latest oom_adj update in the system_server.
+  oom_adj_trigger STRING,
+  -- Anon RSS counter value
+  anon_rss INT,
+  -- File RSS counter value
+  file_rss INT,
+  -- Shared memory RSS counter value
+  shmem_rss INT,
+  -- Total RSS value. Sum of `anon_rss`, `file_rss` and `shmem_rss`. Returns
+  -- value even if one of the values is NULL.
+  rss INT,
+  -- Swap counter value
+  swap INT,
+  -- Sum or `anon_rss` and `swap`. Returns value even if one of the values is
+  -- NULL.
+  anon_rss_and_swap INT,
+  -- Sum or `rss` and `swap`. Returns value even if one of the values is NULL.
+  rss_and_swap INT
+) AS
+SELECT
+  ts,
+  dur,
+  score,
+  bucket,
+  upid,
+  process_name,
+  pid,
+  oom_adj_id,
+  oom_adj_ts,
+  oom_adj_dur,
+  oom_adj_track_id,
+  oom_adj_thread_name,
+  oom_adj_reason,
+  oom_adj_trigger,
+  anon_rss,
+  file_rss,
+  shmem_rss,
+  file_rss + anon_rss + COALESCE(shmem_rss, 0) AS rss,
+  swap,
+  anon_rss + COALESCE(swap, 0) AS anon_rss_and_swap,
+  anon_rss + file_rss  + COALESCE(shmem_rss, 0) + COALESCE(swap, 0) AS rss_and_swap
+FROM _mem_ooms_sj
+JOIN process USING (upid);
diff --git a/test/trace_processor/diff_tests/stdlib/android/tests.py b/test/trace_processor/diff_tests/stdlib/android/tests.py
index 59a8877..6781e3e 100644
--- a/test/trace_processor/diff_tests/stdlib/android/tests.py
+++ b/test/trace_processor/diff_tests/stdlib/android/tests.py
@@ -1244,16 +1244,16 @@
       """,
         out=Csv("""
         "ts","dur","score","bucket","process_name","oom_adj_ts","oom_adj_dur","oom_adj_thread_name","oom_adj_reason","oom_adj_trigger"
-        1737065264829,701108081,925,"cached_app","com.android.providers.calendar",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737066678827,3470211742,935,"cached_app","com.android.imsserviceentitlement",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737066873002,3470017567,945,"cached_app","com.android.carrierconfig",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737067058812,3469831757,955,"cached_app_lmk_first","com.android.messaging",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737067246975,699224817,955,"cached_app_lmk_first","android.process.acore",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737068421919,3468468650,965,"cached_app_lmk_first","com.android.shell",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737068599673,697908135,965,"cached_app_lmk_first","android.process.media",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737068933602,3467956967,975,"cached_app_lmk_first","com.android.gallery3d",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737069091010,3467799559,975,"cached_app_lmk_first","com.android.packageinstaller",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
-        1737069240534,3467650035,985,"cached_app_lmk_first","com.android.managedprovisioning",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737065264829,701108081,925,"cached","com.android.providers.calendar",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737066678827,3470211742,935,"cached","com.android.imsserviceentitlement",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737066873002,3470017567,945,"cached","com.android.carrierconfig",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737067058812,3469831757,955,"cached","com.android.messaging",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737067246975,699224817,955,"cached","android.process.acore",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737068421919,3468468650,965,"cached","com.android.shell",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737068599673,697908135,965,"cached","android.process.media",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737068933602,3467956967,975,"cached","com.android.gallery3d",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737069091010,3467799559,975,"cached","com.android.packageinstaller",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
+1737069240534,3467650035,985,"cached","com.android.managedprovisioning",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
       """))
 
   def test_broadcast_minsdk_u(self):
diff --git a/test/trace_processor/diff_tests/stdlib/memory/tests.py b/test/trace_processor/diff_tests/stdlib/memory/tests.py
index bc8f16d..02da212 100644
--- a/test/trace_processor/diff_tests/stdlib/memory/tests.py
+++ b/test/trace_processor/diff_tests/stdlib/memory/tests.py
@@ -67,3 +67,27 @@
         38090817604,11930827,1,1982,"com.android.systemui",373714944
               """))
 
+  def test_memory_oom_score_with_rss_and_swap_per_process(self):
+    return DiffTestBlueprint(
+        trace=DataPath('sched_wakeup_trace.atr'),
+        query="""
+        INCLUDE PERFETTO MODULE memory.linux.process;
+        SELECT *
+        FROM memory_oom_score_with_rss_and_swap_per_process
+        WHERE oom_adj_reason IS NOT NULL
+        ORDER BY ts
+        LIMIT 10;
+      """,
+        out=Csv("""
+        "ts","dur","score","bucket","upid","process_name","pid","oom_adj_id","oom_adj_ts","oom_adj_dur","oom_adj_track_id","oom_adj_thread_name","oom_adj_reason","oom_adj_trigger","anon_rss","file_rss","shmem_rss","rss","swap","anon_rss_and_swap","rss_and_swap"
+        1737065264829,701108081,925,"cached",269,"com.android.providers.calendar",1937,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",49229824,57495552,835584,107560960,0,49229824,107560960
+        1737066678827,2934486383,935,"cached",287,"com.android.imsserviceentitlement",2397,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",48881664,57081856,831488,106795008,0,48881664,106795008
+        1737066873002,2934292208,945,"cached",292,"com.android.carrierconfig",2593,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",48586752,49872896,823296,99282944,0,48586752,99282944
+        1737067058812,2934106398,955,"cached",288,"com.android.messaging",2416,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",54956032,71417856,843776,127217664,0,54956032,127217664
+        1737067246975,699224817,955,"cached",267,"android.process.acore",1866,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",52498432,72048640,856064,125403136,0,52498432,125403136
+        1737068421919,2932743291,965,"cached",273,"com.android.shell",2079,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",48738304,52056064,823296,101617664,0,48738304,101617664
+        1737068599673,970398,965,"cached",271,"android.process.media",2003,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",49917952,60444672,839680,111202304,0,49917952,111202304
+        1737068933602,2932231608,975,"cached",286,"com.android.gallery3d",2371,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",49561600,54521856,831488,104914944,0,49561600,104914944
+        1737069091010,682459310,975,"cached",289,"com.android.packageinstaller",2480,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",49364992,52539392,827392,102731776,0,49364992,102731776
+        1737069240534,489635,985,"cached",268,"com.android.managedprovisioning",1868,332,1737064421516,29484835,1217,"binder:642_1","processEnd","IActivityManager#1598246212",50683904,53985280,815104,105484288,0,50683904,105484288
+         """))