• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2# Copyright (C) 2023 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 a
7#
8#      http://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
16from python.generators.diff_tests.testing import Path, DataPath, Metric, Systrace
17from python.generators.diff_tests.testing import Csv, Json, TextProto, BinaryProto
18from python.generators.diff_tests.testing import DiffTestBlueprint
19from python.generators.diff_tests.testing import TestSuite
20from python.generators.diff_tests.testing import PrintProfileProto
21
22
23class AndroidStdlib(TestSuite):
24
25  def test_android_battery_stats_event_slices(self):
26    # The following has three events
27    # * top (123, mail) from 1000 to 9000 explicit
28    # * job (456, mail_job) starting at 3000 (end is inferred as trace end)
29    # * job (789, video_job) ending at 4000 (start is inferred as trace start)
30    return DiffTestBlueprint(
31        trace=TextProto(r"""
32        packet {
33          ftrace_events {
34            cpu: 1
35            event {
36              timestamp: 1000
37              pid: 1
38              print {
39                buf: "N|1000|battery_stats.top|+top=123:\"mail\"\n"
40              }
41            }
42            event {
43              timestamp: 3000
44              pid: 1
45              print {
46                buf: "N|1000|battery_stats.job|+job=456:\"mail_job\"\n"
47              }
48            }
49            event {
50              timestamp: 4000
51              pid: 1
52              print {
53                buf: "N|1000|battery_stats.job|-job=789:\"video_job\"\n"
54              }
55            }
56            event {
57              timestamp: 9000
58              pid: 1
59              print {
60                buf: "N|1000|battery_stats.top|-top=123:\"mail\"\n"
61              }
62            }
63          }
64        }
65        """),
66        query="""
67        INCLUDE PERFETTO MODULE android.battery_stats;
68        SELECT * FROM android_battery_stats_event_slices
69        ORDER BY str_value;
70        """,
71        out=Path('android_battery_stats_event_slices.out'))
72
73  def test_android_battery_stats_counters(self):
74    return DiffTestBlueprint(
75        trace=TextProto(r"""
76        packet {
77          ftrace_events {
78            cpu: 1
79            event {
80              timestamp: 1000
81              pid: 1
82              print {
83                buf: "C|1000|battery_stats.data_conn|13\n"
84              }
85            }
86            event {
87              timestamp: 4000
88              pid: 1
89              print {
90                buf: "C|1000|battery_stats.data_conn|20\n"
91              }
92            }
93            event {
94              timestamp: 1000
95              pid: 1
96              print {
97                buf: "C|1000|battery_stats.audio|1\n"
98              }
99            }
100          }
101        }
102        """),
103        query="""
104        INCLUDE PERFETTO MODULE android.battery_stats;
105        SELECT * FROM android_battery_stats_state
106        ORDER BY ts, track_name;
107        """,
108        out=Csv("""
109        "ts","dur","safe_dur","track_name","value","value_name"
110        1000,-1,3000,"battery_stats.audio",1,"active"
111        1000,3000,3000,"battery_stats.data_conn",13,"4G (LTE)"
112        4000,-1,0,"battery_stats.data_conn",20,"5G (NR)"
113        """))
114
115  def test_anrs(self):
116    return DiffTestBlueprint(
117        trace=Path('../../metrics/android/android_anr_metric.py'),
118        query="""
119        INCLUDE PERFETTO MODULE android.anrs;
120        SELECT *
121        FROM android_anrs;
122      """,
123        out=Csv("""
124        "process_name","pid","upid","error_id","ts","subject"
125        "com.google.android.app1",11167,"[NULL]","da24554c-452a-4ae1-b74a-fb898f6e0982",1000,"Test ANR subject 1"
126        "com.google.android.app2","[NULL]","[NULL]","8612fece-c2f1-4aeb-9d45-8e6d9d0201cf",2000,"Test ANR subject 2"
127        "com.google.android.app3","[NULL]","[NULL]","c25916a0-a8f0-41f3-87df-319e06471a0f",3000,"[NULL]"
128      """))
129
130  def test_binder_sync_binder_metrics(self):
131    return DiffTestBlueprint(
132        trace=DataPath('android_binder_metric_trace.atr'),
133        query="""
134        INCLUDE PERFETTO MODULE android.binder;
135        SELECT
136          aidl_name,
137          binder_txn_id,
138          client_process,
139          client_thread,
140          client_upid,
141          client_utid,
142          client_tid,
143          is_main_thread,
144          client_ts,
145          client_dur,
146          client_oom_score,
147          binder_reply_id,
148          server_process,
149          server_thread,
150          server_upid,
151          server_utid,
152          server_tid,
153          server_ts,
154          server_dur,
155          server_oom_score
156        FROM android_binder_txns
157        WHERE binder_txn_id = 34382
158        ORDER BY client_ts
159        LIMIT 1;
160      """,
161        out=Csv("""
162        "aidl_name","binder_txn_id","client_process","client_thread","client_upid","client_utid","client_tid","is_main_thread","client_ts","client_dur","client_oom_score","binder_reply_id","server_process","server_thread","server_upid","server_utid","server_tid","server_ts","server_dur","server_oom_score"
163        "AIDL::java::ISensorPrivacyManager::isSensorPrivacyEnabled::server",34382,"/system/bin/audioserver","audioserver",281,281,492,1,25505818197,3125407,-1000,34383,"system_server","binder:641_4",311,539,1596,25505891588,3000749,-900
164      """))
165
166  def test_binder_sync_binder_thread_state(self):
167    return DiffTestBlueprint(
168        trace=DataPath('android_binder_metric_trace.atr'),
169        query="""
170      INCLUDE PERFETTO MODULE android.binder;
171      SELECT
172        binder_txn_id,
173        client_ts,
174        client_tid,
175        binder_reply_id,
176        server_ts,
177        server_tid,
178        thread_state_type,
179        thread_state,
180        thread_state_dur,
181        thread_state_count
182      FROM android_sync_binder_thread_state_by_txn
183      WHERE binder_txn_id = 34382
184      ORDER BY thread_state_dur;
185      """,
186        out=Csv("""
187      "binder_txn_id","client_ts","client_tid","binder_reply_id","server_ts","server_tid","thread_state_type","thread_state","thread_state_dur","thread_state_count"
188      34382,25505818197,492,34383,25505891588,1596,"binder_reply","R+",10030,1
189      34382,25505818197,492,34383,25505891588,1596,"binder_txn","Running",26597,2
190      34382,25505818197,492,34383,25505891588,1596,"binder_txn","R",38947,1
191      34382,25505818197,492,34383,25505891588,1596,"binder_reply","Running",533663,3
192      34382,25505818197,492,34383,25505891588,1596,"binder_reply","D",864664,1
193      34382,25505818197,492,34383,25505891588,1596,"binder_reply","R",1592392,1
194      34382,25505818197,492,34383,25505891588,1596,"binder_txn","S",3059863,1
195      """))
196
197  def test_binder_sync_binder_blocked_function(self):
198    return DiffTestBlueprint(
199        trace=DataPath('android_binder_metric_trace.atr'),
200        query="""
201      INCLUDE PERFETTO MODULE android.binder;
202      SELECT
203        binder_txn_id,
204        client_ts,
205        client_tid,
206        binder_reply_id,
207        server_ts,
208        server_tid,
209        thread_state_type,
210        blocked_function,
211        blocked_function_dur,
212        blocked_function_count
213      FROM android_sync_binder_blocked_functions_by_txn
214      WHERE binder_txn_id = 34382
215      ORDER BY blocked_function_dur;
216      """,
217        out=Csv("""
218      "binder_txn_id","client_ts","client_tid","binder_reply_id","server_ts","server_tid","thread_state_type","blocked_function","blocked_function_dur","blocked_function_count"
219      34382,25505818197,492,34383,25505891588,1596,"binder_reply","filemap_fault",864664,1
220      """))
221
222  def test_android_slices_standardization_for_aggregation(self):
223    return DiffTestBlueprint(
224        trace=Path('android_slice_standardization.py'),
225        query="""
226        INCLUDE PERFETTO MODULE android.slices;
227        SELECT ANDROID_STANDARDIZE_SLICE_NAME(slice.name) name
228        FROM slice
229        """,
230        out=Csv("""
231        "name"
232        "Lock contention on thread list lock <...>"
233        "Lock contention on thread suspend count lock <...>"
234        "Lock contention on a monitor lock <...>"
235        "monitor contention with <...>"
236        "SuspendThreadByThreadId <...>"
237        "LoadApkAssetsFd <...>"
238        "relayoutWindow <...>"
239        "CoroutineContinuation"
240        "Choreographer#doFrame"
241        "DrawFrames"
242        "APK load"
243        "OpenDexFilesFromOat"
244        "Open oat file"
245        "CoroutineContinuation"
246        "Garbage Collector"
247        "Handler: android.view.View"
248        "Handler: android.os.AsyncTask"
249        "Handler: com.android.systemui.broadcast.ActionReceiver"
250        "Handler: com.android.keyguard.KeyguardUpdateMonitor"
251        "Handler: com.android.systemui.qs.TileServiceManager"
252        "FrameBuffer-<num>#invokeListeners-non-direct"
253        "Transaction (ptz-fgd-1-LOCAL_MEDIA_REMOVE_DELETED_ITEMS_SYNC, <...>)"
254        "InputConsumer processing on ClientState<...>"
255        "InputConsumer processing on [Gesture Monitor] swipe-up (0x<num>)"
256        "+job=<num>:"com.google.android.apps.internal.betterbug""
257        "Looper.dispatch: android.app.ActivityThread$H(runnable@<num>(android.app.ActivityThread@<num>,<num>))"
258        "Not changed at ALL 0"
259        "Three digits to replace <num> <num>"
260        "kworker/<num>"
261        "<num>"
262        "<num> SurfaceView[com.google.android.apps.maps/com.google.android.maps.MapsActivity]#1(BLAST Consumer)1"
263        "1 2 3 4"
264        "0x<num>"
265        "ImageDecoder#decodeDrawable"
266        "+state=<num>:"sensor:0x<num>""
267        "[<num>]< SET_SIGNAL_STRENGTH_REPORTING_CRITERIA"
268        "sendMessage(inputChannel=<num> PopupWindow:<num>, seq=0x<num>, type=FOCUS)"
269        "Over the RR duration: timestamp:<num>,signalTime:<num>,VSyncPeriod:<num>,desiredVsyncPeriod:<num>,transientDuration:1"
270        """))
271
272  def test_monitor_contention_extraction(self):
273    return DiffTestBlueprint(
274        trace=DataPath('android_monitor_contention_trace.atr'),
275        query="""
276          INCLUDE PERFETTO MODULE android.monitor_contention;
277          SELECT
278            blocking_method,
279            blocked_method,
280            short_blocking_method,
281            short_blocked_method
282          FROM android_monitor_contention
283          WHERE binder_reply_id IS NOT NULL
284          ORDER BY dur DESC
285          LIMIT 1;
286        """,
287        out=Csv("""
288          "blocking_method","blocked_method","short_blocking_method","short_blocked_method"
289          "boolean com.android.server.am.ActivityManagerService.forceStopPackageLocked(java.lang.String, int, boolean, boolean, boolean, boolean, boolean, int, java.lang.String)","boolean com.android.server.am.ActivityManagerService.isUidActive(int, java.lang.String)","com.android.server.am.ActivityManagerService.forceStopPackageLocked","com.android.server.am.ActivityManagerService.isUidActive"
290        """))
291
292  def test_monitor_contention_chain_blocked_functions(self):
293    return DiffTestBlueprint(
294        trace=DataPath('android_monitor_contention_trace.atr'),
295        query="""
296          INCLUDE PERFETTO MODULE android.monitor_contention;
297          SELECT
298            *
299          FROM android_monitor_contention_chain_blocked_functions_by_txn
300          WHERE id = 13934
301          ORDER BY blocked_function_dur;
302        """,
303        out=Csv("""
304          "id","blocked_function","blocked_function_dur","blocked_function_count"
305          13934,"blkdev_issue_flush",11950576,1
306        """))
307
308  def test_monitor_contention_chain_thread_states(self):
309    return DiffTestBlueprint(
310        trace=DataPath('android_monitor_contention_trace.atr'),
311        query="""
312          INCLUDE PERFETTO MODULE android.monitor_contention;
313          SELECT
314            *
315          FROM android_monitor_contention_chain_thread_state_by_txn
316          WHERE id = 13934
317          ORDER BY thread_state_dur;
318        """,
319        out=Csv("""
320          "id","thread_state","thread_state_dur","thread_state_count"
321          13934,"R+",7649,1
322          13934,"R",300606,3
323          13934,"Running",649961,3
324          13934,"D",11950576,1
325        """))
326
327  def test_android_monitor_contention_chain_thread_state(self):
328    return DiffTestBlueprint(
329        trace=DataPath('android_monitor_contention_trace.atr'),
330        query="""
331          INCLUDE PERFETTO MODULE android.monitor_contention;
332          SELECT
333            *
334          FROM android_monitor_contention_chain_thread_state
335          WHERE id = 13934;
336        """,
337        out=Csv("""
338          "id","ts","dur","blocking_utid","blocked_function","state"
339          13934,1739927671503,141874,557,"[NULL]","R"
340          13934,1739927813377,69101,557,"[NULL]","Running"
341          13934,1739927882478,7649,557,"[NULL]","R+"
342          13934,1739927890127,3306,557,"[NULL]","Running"
343          13934,1739927893433,11950576,557,"blkdev_issue_flush","D"
344          13934,1739939844009,76306,557,"[NULL]","R"
345          13934,1739939920315,577554,557,"[NULL]","Running"
346          13934,1739940497869,82426,557,"[NULL]","R"
347        """))
348
349  def test_monitor_contention_chain_extraction(self):
350    return DiffTestBlueprint(
351        trace=DataPath('android_monitor_contention_trace.atr'),
352        query="""
353          INCLUDE PERFETTO MODULE android.monitor_contention;
354          SELECT
355            parent_id,
356            blocking_method,
357            blocked_method,
358            short_blocking_method,
359            short_blocked_method,
360            blocking_src,
361            blocked_src,
362            waiter_count,
363            blocked_thread_name,
364            blocking_thread_name,
365            blocking_tid,
366            process_name,
367            id,
368            ts,
369            dur,
370            monotonic_dur,
371            is_blocked_thread_main,
372            blocked_thread_tid,
373            is_blocking_thread_main,
374            blocking_thread_tid,
375            binder_reply_ts,
376            binder_reply_tid,
377            pid,
378            child_id
379          FROM android_monitor_contention_chain
380          WHERE parent_id IS NOT NULL
381          ORDER BY dur DESC
382          LIMIT 1;
383        """,
384        out=Csv("""
385          "parent_id","blocking_method","blocked_method","short_blocking_method","short_blocked_method","blocking_src","blocked_src","waiter_count","blocked_thread_name","blocking_thread_name","blocking_tid","process_name","id","ts","dur","monotonic_dur","is_blocked_thread_main","blocked_thread_tid","is_blocking_thread_main","blocking_thread_tid","binder_reply_ts","binder_reply_tid","pid","child_id"
386          949,"void com.android.server.am.ActivityManagerService$AppDeathRecipient.binderDied()","int com.android.server.am.ActivityManagerService.getMemoryTrimLevel()","com.android.server.am.ActivityManagerService$AppDeathRecipient.binderDied","com.android.server.am.ActivityManagerService.getMemoryTrimLevel","ActivityManagerService.java:1478","ActivityManagerService.java:9183",1,"system_server","binder:642_12",2720,"system_server",956,1737123891932,17577143,17577143,1,642,0,2720,"[NULL]","[NULL]",642,"[NULL]"
387        """))
388
389  def test_monitor_contention_graph(self):
390    return DiffTestBlueprint(
391        trace=DataPath('android_monitor_contention_trace.atr'),
392        query="""
393        INCLUDE PERFETTO MODULE android.monitor_contention;
394
395        SELECT HEX(pprof) FROM android_monitor_contention_graph(303)
396      """,
397        out=BinaryProto(
398            message_type="perfetto.third_party.perftools.profiles.Profile",
399            post_processing=PrintProfileProto,
400            contents="""
401        Sample:
402        Values: 29604
403        Stack:
404        android.bg:android.os.MessageQueue.nativeWake (0x0)
405        fg:android.os.MessageQueue.next (0x0)
406
407        Sample:
408        Values: 66924
409        Stack:
410        android.bg:android.os.MessageQueue.enqueueMessage (0x0)
411        fg:android.os.MessageQueue.next (0x0)
412
413        Sample:
414        Values: 73265
415        Stack:
416        main:android.os.MessageQueue.enqueueMessage (0x0)
417        fg:android.os.MessageQueue.next (0x0)
418        """))
419
420  def test_thread_creation_spam(self):
421    return DiffTestBlueprint(
422        trace=DataPath('android_monitor_contention_trace.atr'),
423        query="""
424      INCLUDE PERFETTO MODULE android.thread;
425      SELECT * FROM _android_thread_creation_spam(1e9, 1e9);
426      """,
427        out=Csv("""
428      "process_name","pid","thread_name_prefix","max_count_per_sec"
429      "com.android.providers.media.module",3487,"SharedPreferenc",3
430      "com.android.providers.media.module",3487,"MediaCodec_loop",2
431      "/apex/com.android.adbd/bin/adbd",527,"shell",1
432      "media.swcodec",563,"id.hevc.decoder",1
433      "system_server",642,"Thread",1
434      "sh",3474,"sh",1
435      "sh",3476,"sh",1
436      "sh",3478,"sh",1
437      "am",3480,"am",1
438      "cmd",3482,"binder",1
439      "cmd",3482,"cmd",1
440      "com.android.providers.media.module",3487,"CodecLooper",1
441      "sh",3517,"sh",1
442      "sgdisk",3521,"sgdisk",1
443      "blkid",3523,"blkid",1
444      "binder:243_4",3524,"binder",1
445      "fsck_msdos",3525,"fsck_msdos",1
446      "binder:243_4",3526,"binder",1
447      "sh",3532,"sh",1
448      "cut",3534,"cut",1
449      "sh",3536,"sh",1
450      "sh",3544,"sh",1
451      "sh",3546,"sh",1
452      "sh",3564,"sh",1
453      """))
454
455  def test_f2fs_counter_stats(self):
456    return DiffTestBlueprint(
457        trace=DataPath('android_monitor_contention_trace.atr'),
458        query="""
459      INCLUDE PERFETTO MODULE android.io;
460      SELECT * FROM _android_io_f2fs_counter_stats;
461      """,
462        out=Csv("""
463        "name","sum","max","min","dur","count","avg"
464        "read_app_total",580966.000000,567184.000000,13782.000000,2515275969,2,290483.000000
465        "read_app_buffered",580966.000000,567184.000000,13782.000000,2515275969,2,290483.000000
466        "write_cp_node",94208.000000,94208.000000,0.000000,2515275969,2,47104.000000
467        "write_app_mapped",65536.000000,65536.000000,0.000000,2515275969,2,32768.000000
468        "write_fs_data",28672.000000,28672.000000,0.000000,2515275969,2,14336.000000
469        "write_cp_meta",28672.000000,28672.000000,0.000000,2515275969,2,14336.000000
470        "write_app_total",20616.000000,20616.000000,0.000000,2515275969,2,10308.000000
471        "write_app_buffered",20616.000000,20616.000000,0.000000,2515275969,2,10308.000000
472        "write_fs_node",8192.000000,8192.000000,0.000000,2515275969,2,4096.000000
473        "write_sync_meta_peak",8.000000,8.000000,0.000000,2515276848,2,4.000000
474        "write_sync_meta_cnt",5.000000,5.000000,0.000000,2515276848,2,2.500000
475        "write_sync_node_peak",4.000000,4.000000,0.000000,2515276848,2,2.000000
476        "write_sync_node_cnt",3.000000,3.000000,0.000000,2515276848,2,1.500000
477        "write_sync_data_cnt",3.000000,3.000000,0.000000,2515276848,2,1.500000
478        "write_sync_node_avg",1.000000,1.000000,0.000000,2515276848,2,0.500000
479        "write_sync_meta_avg",1.000000,1.000000,0.000000,2515276848,2,0.500000
480        "write_sync_data_peak",0.000000,0.000000,0.000000,2515276848,2,0.000000
481        "write_sync_data_avg",0.000000,0.000000,0.000000,2515276848,2,0.000000
482        "write_async_node_peak",0.000000,0.000000,0.000000,2515276848,2,0.000000
483        "write_async_node_cnt",0.000000,0.000000,0.000000,2515276848,2,0.000000
484        "write_async_node_avg",0.000000,0.000000,0.000000,2515276848,2,0.000000
485        "write_async_meta_peak",0.000000,0.000000,0.000000,2515276848,2,0.000000
486        "write_async_meta_cnt",0.000000,0.000000,0.000000,2515276848,2,0.000000
487        "write_async_meta_avg",0.000000,0.000000,0.000000,2515276848,2,0.000000
488        "write_async_data_peak",0.000000,0.000000,0.000000,2515276848,2,0.000000
489        "write_async_data_cnt",0.000000,0.000000,0.000000,2515276848,2,0.000000
490        "write_async_data_avg",0.000000,0.000000,0.000000,2515276848,2,0.000000
491        "read_node_peak",0.000000,0.000000,0.000000,2515276848,2,0.000000
492        "read_node_cnt",0.000000,0.000000,0.000000,2515276848,2,0.000000
493        "read_node_avg",0.000000,0.000000,0.000000,2515276848,2,0.000000
494        "read_meta_peak",0.000000,0.000000,0.000000,2515276848,2,0.000000
495        "read_meta_cnt",0.000000,0.000000,0.000000,2515276848,2,0.000000
496        "read_meta_avg",0.000000,0.000000,0.000000,2515276848,2,0.000000
497        "read_data_peak",0.000000,0.000000,0.000000,2515276848,2,0.000000
498        "read_data_cnt",0.000000,0.000000,0.000000,2515276848,2,0.000000
499        "read_data_avg",0.000000,0.000000,0.000000,2515276848,2,0.000000
500        "write_gc_node",0.000000,0.000000,0.000000,2515275969,2,0.000000
501        "write_gc_data",0.000000,0.000000,0.000000,2515275969,2,0.000000
502        "write_fs_meta",0.000000,0.000000,0.000000,2515275969,2,0.000000
503        "write_cp_data",0.000000,0.000000,0.000000,2515275969,2,0.000000
504        "write_app_direct",0.000000,0.000000,0.000000,2515275969,2,0.000000
505        "read_fs_node",0.000000,0.000000,0.000000,2515275969,2,0.000000
506        "read_fs_meta",0.000000,0.000000,0.000000,2515275969,2,0.000000
507        "read_fs_gdata",0.000000,0.000000,0.000000,2515275969,2,0.000000
508        "read_fs_data",0.000000,0.000000,0.000000,2515275969,2,0.000000
509        "read_fs_cdata",0.000000,0.000000,0.000000,2515275969,2,0.000000
510        "read_app_mapped",0.000000,0.000000,0.000000,2515275969,2,0.000000
511        "read_app_direct",0.000000,0.000000,0.000000,2515275969,2,0.000000
512        "other_fs_discard",0.000000,0.000000,0.000000,2515275969,2,0.000000
513      """))
514
515  def test_f2fs_write_stats(self):
516    return DiffTestBlueprint(
517        trace=DataPath('android_monitor_contention_trace.atr'),
518        query="""
519      INCLUDE PERFETTO MODULE android.io;
520      SELECT tid, thread_name, pid, process_name, ino, dev, bytes, write_count FROM _android_io_f2fs_write_stats;
521      """,
522        out=Csv("""
523        "tid","thread_name","pid","process_name","ino","dev","bytes","write_count"
524        3548,"AsyncTask #1",3487,"com.android.providers.media.module",2636,65077,135168,33
525        3516,"fg",3487,"com.android.providers.media.module",2409,65077,98304,24
526        3548,"AsyncTask #1",3487,"com.android.providers.media.module",2642,65077,78280,57
527        3516,"fg",3487,"com.android.providers.media.module",2424,65077,37112,28
528        3487,"rs.media.module",3487,"com.android.providers.media.module",2366,65077,16480,12
529        3515,"ackgroundThread",3487,"com.android.providers.media.module",2642,65077,8272,7
530        282,"f2fs_ckpt-254:5",282,"f2fs_ckpt-254:5",4,65077,432,6
531        282,"f2fs_ckpt-254:5",282,"f2fs_ckpt-254:5",5,65077,432,6
532        3548,"AsyncTask #1",3487,"com.android.providers.media.module",3145,65077,233,2
533        743,"StorageManagerS",642,"system_server",3144,65077,227,1
534        282,"f2fs_ckpt-254:5",282,"f2fs_ckpt-254:5",6,65077,216,3
535        3487,"rs.media.module",3487,"com.android.providers.media.module",2367,65077,8,8
536        3516,"fg",3487,"com.android.providers.media.module",2425,65077,8,8
537        3548,"AsyncTask #1",3487,"com.android.providers.media.module",2643,65077,8,8
538      """))
539
540  def test_f2fs_aggregate_write_stats(self):
541    return DiffTestBlueprint(
542        trace=DataPath('android_monitor_contention_trace.atr'),
543        query="""
544        INCLUDE PERFETTO MODULE android.io;
545        SELECT total_write_count, distinct_processes, total_bytes_written,
546               distinct_device_count, distinct_inode_count, distinct_thread_count
547        FROM _android_io_f2fs_aggregate_write_stats
548        """,
549        out=Csv("""
550        "total_write_count","distinct_processes","total_bytes_written","distinct_device_count","distinct_inode_count","distinct_thread_count"
551        203,3,375180,1,13,6
552        """))
553
554  def test_binder_async_txns(self):
555    return DiffTestBlueprint(
556        trace=DataPath('android_binder_metric_trace.atr'),
557        query="""
558        INCLUDE PERFETTO MODULE android.binder;
559        SELECT
560          aidl_name,
561          client_process,
562          server_process,
563          client_thread,
564          client_tid,
565          server_tid,
566          is_main_thread,
567          client_oom_score,
568          server_oom_score,
569          client_ts,
570          server_ts,
571          aidl_ts,
572          aidl_dur
573        FROM android_binder_txns
574        WHERE aidl_name IS NOT NULL AND is_sync = 0
575        ORDER BY client_ts
576        LIMIT 10;
577      """,
578        out=Csv("""
579        "aidl_name","client_process","server_process","client_thread","client_tid","server_tid","is_main_thread","client_oom_score","server_oom_score","client_ts","server_ts","aidl_ts","aidl_dur"
580        "AIDL::cpp::IClientCallback::onClients::cppServer","/system/bin/servicemanager","/system/bin/apexd","servicemanager",243,386,1,-1000,-1000,22213481492,22213517474,22213598784,322601
581        "AIDL::cpp::IMediaMetricsService::submitBuffer::cppServer","/system/bin/audioserver","media.metrics","audioserver",492,1262,1,-1000,-1000,25512325446,25512488255,25512708792,9677878
582        "AIDL::cpp::IMediaMetricsService::submitBuffer::cppServer","/system/bin/audioserver","media.metrics","audioserver",492,1262,1,-1000,-1000,25512842465,25522410505,25522418582,58044
583        "AIDL::cpp::IDisplayEventConnection::stealReceiveChannel::cppServer","/vendor/bin/hw/android.hardware.graphics.composer3-service.ranchu","/system/bin/surfaceflinger","binder:446_1",553,522,0,-1000,-1000,25847718645,25847734867,25849056936,10493
584        "AIDL::cpp::ITunnelModeEnabledListener::onTunnelModeEnabledChanged::cppServer","/system/bin/surfaceflinger","system_server","binder:496_2",522,1600,0,-1000,-900,25854181504,25854195485,25854205007,214767
585        "AIDL::cpp::IDisplayEventConnection::requestNextVsync::cppServer","system_server","/system/bin/surfaceflinger","android.anim",662,522,0,-900,-1000,25855697394,25855710732,25855721528,81461
586        "AIDL::cpp::IDisplayEventConnection::requestNextVsync::cppServer","system_server","/system/bin/surfaceflinger","android.anim",662,522,0,-900,-1000,25873210999,25873224961,25873232951,3493
587        "AIDL::cpp::IDisplayEventConnection::requestNextVsync::cppServer","system_server","/system/bin/surfaceflinger","android.anim",662,522,0,-900,-1000,25951278287,25952242397,25952255710,30672
588        "AIDL::cpp::IDisplayEventConnection::requestNextVsync::cppServer","system_server","/system/bin/surfaceflinger","android.anim",662,1575,0,-900,-1000,25965452828,25965590137,25965596757,2631
589        "AIDL::cpp::IDisplayEventConnection::requestNextVsync::cppServer","system_server","/system/bin/surfaceflinger","android.anim",662,1575,0,-900,-1000,26046376252,26046544680,26046553099,53452
590      """))
591
592  def test_binder_txns(self):
593    return DiffTestBlueprint(
594        trace=DataPath('sched_wakeup_trace.atr'),
595        query="""
596        INCLUDE PERFETTO MODULE android.binder;
597        SELECT
598          aidl_name,
599          interface,
600          method_name,
601          client_process,
602          server_process,
603          client_thread,
604          client_tid,
605          server_tid,
606          is_main_thread,
607          client_oom_score,
608          server_oom_score,
609          client_ts,
610          server_ts,
611          client_dur,
612          server_dur,
613          client_monotonic_dur,
614          server_monotonic_dur,
615          aidl_ts,
616          aidl_dur,
617          is_sync,
618          client_package_version_code,
619          server_package_version_code,
620          is_client_package_debuggable,
621          is_server_package_debuggable
622        FROM android_binder_txns
623        WHERE aidl_name IS NOT NULL AND client_package_version_code IS NOT NULL
624        ORDER BY client_ts
625        LIMIT 10;
626      """,
627        out=Csv("""
628                "aidl_name","interface","method_name","client_process","server_process","client_thread","client_tid","server_tid","is_main_thread","client_oom_score","server_oom_score","client_ts","server_ts","client_dur","server_dur","client_monotonic_dur","server_monotonic_dur","aidl_ts","aidl_dur","is_sync","client_package_version_code","server_package_version_code","is_client_package_debuggable","is_server_package_debuggable"
629                "AIDL::java::INetworkStatsService::getMobileIfaces::server","INetworkStatsService","getMobileIfaces","com.android.phone","system_server","m.android.phone",1469,657,1,-800,-900,1736110278076,1736110435876,765487,462664,765487,462664,1736110692464,135281,1,33,"[NULL]",0,"[NULL]"
630                "AIDL::java::INetworkStatsService::getIfaceStats::server","INetworkStatsService","getIfaceStats","com.android.phone","system_server","m.android.phone",1469,657,1,-800,-900,1736111274404,1736111340019,481038,361607,481038,361607,1736111417370,249758,1,33,"[NULL]",0,"[NULL]"
631                "AIDL::java::INetworkStatsService::getMobileIfaces::server","INetworkStatsService","getMobileIfaces","com.android.phone","system_server","m.android.phone",1469,657,1,-800,-900,1736111874030,1736111923740,254494,159330,254494,159330,1736111994038,64535,1,33,"[NULL]",0,"[NULL]"
632                "AIDL::java::INetworkStatsService::getIfaceStats::server","INetworkStatsService","getIfaceStats","com.android.phone","system_server","m.android.phone",1469,657,1,-800,-900,1736112257185,1736112301639,309870,220751,309870,220751,1736112361927,133727,1,33,"[NULL]",0,"[NULL]"
633                "AIDL::java::IPackageManager::isProtectedBroadcast::server","IPackageManager","isProtectedBroadcast","com.android.systemui","system_server","ndroid.systemui",1253,657,1,-800,-900,1737108493015,1737125387579,17949987,163732,17949987,163732,1737125511194,24959,1,33,"[NULL]",0,"[NULL]"
634                "AIDL::java::IActivityManager::checkPermission::server","IActivityManager","checkPermission","com.android.phone","system_server","m.android.phone",1469,2721,1,-800,-900,1737110161286,1737110746980,12677155,147315,12677155,147315,1737110799860,75563,1,33,"[NULL]",0,"[NULL]"
635                "AIDL::java::INetworkStatsService::getMobileIfaces::server","INetworkStatsService","getMobileIfaces","com.android.phone","system_server","m.android.phone",1469,2721,1,-800,-900,1737123460104,1737123475761,447621,137704,447621,137704,1737123532124,48775,1,33,"[NULL]",0,"[NULL]"
636                "AIDL::java::INetworkStatsService::getIfaceStats::server","INetworkStatsService","getIfaceStats","com.android.phone","system_server","m.android.phone",1469,2721,1,-800,-900,1737123982140,1737123994640,191006,164185,191006,164185,1737124033555,109797,1,33,"[NULL]",0,"[NULL]"
637                "AIDL::java::INetworkStatsService::getMobileIfaces::server","INetworkStatsService","getMobileIfaces","com.android.phone","system_server","m.android.phone",1469,2721,1,-800,-900,1737124228451,1737124238356,88522,66721,88522,66721,1737124269922,24911,1,33,"[NULL]",0,"[NULL]"
638                "AIDL::java::INetworkStatsService::getIfaceStats::server","INetworkStatsService","getIfaceStats","com.android.phone","system_server","m.android.phone",1469,2721,1,-800,-900,1737124369273,1737124378273,957260,95254,957260,95254,1737124406331,54810,1,33,"[NULL]",0,"[NULL]"
639        """))
640
641  def test_binder_outgoing_graph(self):
642    return DiffTestBlueprint(
643        trace=DataPath('android_binder_metric_trace.atr'),
644        query="""
645        INCLUDE PERFETTO MODULE android.binder;
646        SELECT HEX(pprof) FROM ANDROID_BINDER_OUTGOING_GRAPH(259)
647      """,
648        out=BinaryProto(
649            message_type="perfetto.third_party.perftools.profiles.Profile",
650            post_processing=PrintProfileProto,
651            contents="""
652        Sample:
653        Values: 0
654        Stack:
655        /system/bin/surfaceflinger (0x0)
656        binder:446_1 (0x0)
657
658        Sample:
659        Values: 0
660        Stack:
661        stealReceiveChannel (0x0)
662        IDisplayEventConnection (0x0)
663        /system/bin/surfaceflinger (0x0)
664        binder:446_1 (0x0)
665        """))
666
667  def test_binder_incoming_graph(self):
668    return DiffTestBlueprint(
669        trace=DataPath('android_binder_metric_trace.atr'),
670        query="""
671        INCLUDE PERFETTO MODULE android.binder;
672        SELECT HEX(pprof) FROM ANDROID_BINDER_INCOMING_GRAPH(296)
673      """,
674        out=BinaryProto(
675            message_type="perfetto.third_party.perftools.profiles.Profile",
676            post_processing=PrintProfileProto,
677            contents="""
678        Sample:
679        Values: 1764197
680        Stack:
681        fixupAppData (0x0)
682        IInstalld (0x0)
683        system_server (0x0)
684
685        Sample:
686        Values: 202423
687        Stack:
688        rmdex (0x0)
689        IInstalld (0x0)
690        system_server (0x0)
691
692        Sample:
693        Values: 438512
694        Stack:
695        cleanupInvalidPackageDirs (0x0)
696        IInstalld (0x0)
697        system_server (0x0)
698
699        Sample:
700        Values: 4734897
701        Stack:
702        invalidateMounts (0x0)
703        IInstalld (0x0)
704        system_server (0x0)
705
706        Sample:
707        Values: 7448312
708        Stack:
709        prepareAppProfile (0x0)
710        IInstalld (0x0)
711        system_server (0x0)
712
713        Sample:
714        Values: 91238713
715        Stack:
716        createAppDataBatched (0x0)
717        IInstalld (0x0)
718        system_server (0x0)
719        """))
720
721  def test_binder_graph_invalid_oom(self):
722    return DiffTestBlueprint(
723        trace=DataPath('android_binder_metric_trace.atr'),
724        query="""
725        INCLUDE PERFETTO MODULE android.binder;
726        SELECT HEX(pprof) FROM ANDROID_BINDER_GRAPH(2000, 2000, 2000, 2000)
727      """,
728        out=BinaryProto(
729            message_type="perfetto.third_party.perftools.profiles.Profile",
730            post_processing=PrintProfileProto,
731            contents="""
732        """))
733
734  def test_binder_graph_valid_oom(self):
735    return DiffTestBlueprint(
736        trace=DataPath('android_binder_metric_trace.atr'),
737        query="""
738        INCLUDE PERFETTO MODULE android.binder;
739        SELECT HEX(pprof) FROM ANDROID_BINDER_GRAPH(-1000, 1000, -1000, 1000)
740      """,
741        out=BinaryProto(
742            message_type="perfetto.third_party.perftools.profiles.Profile",
743            post_processing=PrintProfileProto,
744            contents="""
745            Sample:
746            Values: 0
747            Stack:
748            /system/bin/apexd (0x0)
749            /system/bin/servicemanager (0x0)
750
751            Sample:
752            Values: 0
753            Stack:
754            /system/bin/bootanimation (0x0)
755            /system/bin/surfaceflinger (0x0)
756
757            Sample:
758            Values: 0
759            Stack:
760            /system/bin/cameraserver (0x0)
761            system_server (0x0)
762
763            Sample:
764            Values: 0
765            Stack:
766            /system/bin/storaged (0x0)
767            /vendor/bin/hw/android.hardware.health-service.cuttlefish (0x0)
768
769            Sample:
770            Values: 0
771            Stack:
772            /system/bin/surfaceflinger (0x0)
773            /system/bin/bootanimation (0x0)
774
775            Sample:
776            Values: 0
777            Stack:
778            /system/bin/surfaceflinger (0x0)
779            /vendor/bin/hw/android.hardware.graphics.composer3-service.ranchu (0x0)
780
781            Sample:
782            Values: 0
783            Stack:
784            media.metrics (0x0)
785            /system/bin/audioserver (0x0)
786
787            Sample:
788            Values: 0
789            Stack:
790            system_server (0x0)
791            /system/bin/servicemanager (0x0)
792
793            Sample:
794            Values: 0
795            Stack:
796            system_server (0x0)
797            /system/bin/surfaceflinger (0x0)
798
799            Sample:
800            Values: 1004933
801            Stack:
802            /vendor/bin/hw/android.hardware.sensors-service.example (0x0)
803            system_server (0x0)
804
805            Sample:
806            Values: 105827054
807            Stack:
808            /system/bin/installd (0x0)
809            system_server (0x0)
810
811            Sample:
812            Values: 11316
813            Stack:
814            system_server (0x0)
815            /apex/com.android.os.statsd/bin/statsd (0x0)
816
817            Sample:
818            Values: 12567639
819            Stack:
820            /system/bin/servicemanager (0x0)
821            system_server (0x0)
822
823            Sample:
824            Values: 137623
825            Stack:
826            /vendor/bin/hw/android.hardware.lights-service.example (0x0)
827            system_server (0x0)
828
829            Sample:
830            Values: 140719
831            Stack:
832            system_server (0x0)
833            /system/bin/storaged (0x0)
834
835            Sample:
836            Values: 150044
837            Stack:
838            /vendor/bin/hw/android.hardware.input.processor-service.example (0x0)
839            system_server (0x0)
840
841            Sample:
842            Values: 1877718
843            Stack:
844            /system/bin/surfaceflinger (0x0)
845            system_server (0x0)
846
847            Sample:
848            Values: 19303
849            Stack:
850            system_server (0x0)
851            /vendor/bin/hw/android.hardware.sensors-service.example (0x0)
852
853            Sample:
854            Values: 210889
855            Stack:
856            /system/bin/servicemanager (0x0)
857            /apex/com.android.os.statsd/bin/statsd (0x0)
858
859            Sample:
860            Values: 21505514
861            Stack:
862            /system/bin/idmap2d (0x0)
863            system_server (0x0)
864
865            Sample:
866            Values: 2221699
867            Stack:
868            /vendor/bin/hw/android.hardware.health-service.cuttlefish (0x0)
869            system_server (0x0)
870
871            Sample:
872            Values: 25394
873            Stack:
874            /system/bin/servicemanager (0x0)
875            /system/bin/surfaceflinger (0x0)
876
877            Sample:
878            Values: 2552696
879            Stack:
880            /system/bin/hwservicemanager (0x0)
881            /system/bin/cameraserver (0x0)
882
883            Sample:
884            Values: 28045
885            Stack:
886            /apex/com.android.os.statsd/bin/statsd (0x0)
887            system_server (0x0)
888
889            Sample:
890            Values: 297647
891            Stack:
892            /system/bin/hwservicemanager (0x0)
893            system_server (0x0)
894
895            Sample:
896            Values: 3483649
897            Stack:
898            system_server (0x0)
899            /system/bin/audioserver (0x0)
900
901            Sample:
902            Values: 3677545
903            Stack:
904            /system/bin/servicemanager (0x0)
905            /system/bin/audioserver (0x0)
906
907            Sample:
908            Values: 3991341
909            Stack:
910            /system/bin/servicemanager (0x0)
911            /system/bin/cameraserver (0x0)
912
913            Sample:
914            Values: 41164
915            Stack:
916            system_server (0x0)
917            /vendor/bin/hw/android.hardware.health-service.cuttlefish (0x0)
918
919            Sample:
920            Values: 4948091
921            Stack:
922            system_server (0x0)
923            /system/bin/cameraserver (0x0)
924
925            Sample:
926            Values: 629626
927            Stack:
928            /apex/com.android.hardware.vibrator/bin/hw/android.hardware.vibrator-service.example (0x0)
929            system_server (0x0)
930
931            Sample:
932            Values: 78428525
933            Stack:
934            /vendor/bin/hw/android.hardware.graphics.composer3-service.ranchu (0x0)
935            /system/bin/surfaceflinger (0x0)
936
937            Sample:
938            Values: 81216
939            Stack:
940            /system/bin/vold (0x0)
941            system_server (0x0)
942
943            Sample:
944            Values: 837989
945            Stack:
946            /system/bin/servicemanager (0x0)
947            /system/bin/storaged (0x0)
948        """))
949
950  def test_android_dvfs_counters(self):
951    return DiffTestBlueprint(
952        trace=TextProto(r"""
953          packet {
954            ftrace_events {
955              cpu: 0
956              event {
957                timestamp: 200001000000
958                pid: 2
959                clock_set_rate {
960                  name : "domain@1"
961                  state: 400000
962                }
963              }
964              event {
965                timestamp: 200003000000
966                pid: 2
967                clock_set_rate {
968                  name: "domain@1"
969                  state: 1024000
970                }
971              }
972              event {
973                timestamp: 200005000000
974                pid: 2
975                clock_set_rate {
976                  name: "domain@1"
977                  state: 1024000
978                }
979              }
980            }
981            trusted_uid: 9999
982            trusted_packet_sequence_id: 2
983          }
984         """),
985        query="""
986         INCLUDE PERFETTO MODULE android.dvfs;
987         SELECT * FROM android_dvfs_counters;
988         """,
989        out=Csv("""
990         "name","ts","value","dur"
991         "domain@1 Frequency",200001000000,400000.000000,2000000
992         "domain@1 Frequency",200003000000,1024000.000000,2000000
993         "domain@1 Frequency",200005000000,1024000.000000,0
994         """))
995
996  def test_android_dvfs_counter_stats(self):
997    return DiffTestBlueprint(
998        trace=TextProto(r"""
999          packet {
1000            ftrace_events {
1001              cpu: 0
1002              event {
1003                timestamp: 200001000000
1004                pid: 2
1005                clock_set_rate {
1006                  name : "domain@1"
1007                  state: 400000
1008                }
1009              }
1010              event {
1011                timestamp: 200001000000
1012                pid: 2
1013                clock_set_rate {
1014                name : "bus_throughput"
1015                state: 1014000
1016                }
1017              }
1018              event {
1019                timestamp: 200003000000
1020                pid: 2
1021                clock_set_rate {
1022                  name: "domain@1"
1023                  state: 1024000
1024                }
1025              }
1026              event {
1027                timestamp: 200003000000
1028                pid: 2
1029                clock_set_rate {
1030                  name: "bus_throughput"
1031                  state: 553000
1032                }
1033              }
1034              event {
1035                timestamp: 200005000000
1036                pid: 2
1037                clock_set_rate {
1038                  name: "domain@1"
1039                  state: 1024000
1040                }
1041              }
1042              event {
1043                timestamp: 200005000000
1044                pid: 527
1045                clock_set_rate {
1046                  name: "bus_throughput"
1047                  state: 553000
1048                }
1049              }
1050            }
1051            trusted_uid: 9999
1052            trusted_packet_sequence_id: 2
1053          }
1054         """),
1055        query="""
1056         INCLUDE PERFETTO MODULE android.dvfs;
1057         SELECT * FROM android_dvfs_counter_stats;
1058         """,
1059        out=Csv("""
1060         "name","max","min","dur","wgt_avg"
1061         "bus_throughput Frequency",1014000.000000,553000.000000,2000000,783500.000000
1062         "domain@1 Frequency",1024000.000000,400000.000000,2000000,712000.000000
1063         """))
1064
1065  def test_android_dvfs_counter_residency(self):
1066    return DiffTestBlueprint(
1067        trace=TextProto(r"""
1068          packet {
1069            ftrace_events {
1070              cpu: 0
1071              event {
1072                timestamp: 200001000000
1073                pid: 2
1074                clock_set_rate {
1075                name : "bus_throughput"
1076                state: 1014000
1077                }
1078              }
1079              event {
1080                timestamp: 200003000000
1081                pid: 2
1082                clock_set_rate {
1083                  name: "bus_throughput"
1084                  state: 553000
1085                }
1086              }
1087              event {
1088                timestamp: 200005000000
1089                pid: 527
1090                clock_set_rate {
1091                  name: "bus_throughput"
1092                  state: 553000
1093                }
1094              }
1095            }
1096            trusted_uid: 9999
1097            trusted_packet_sequence_id: 2
1098          }
1099         """),
1100        query="""
1101         INCLUDE PERFETTO MODULE android.dvfs;
1102         SELECT * FROM android_dvfs_counter_residency;
1103         """,
1104        out=Csv("""
1105         "name","value","dur","pct"
1106         "bus_throughput Frequency",553000.000000,2000000,50.000000
1107         "bus_throughput Frequency",1014000.000000,2000000,50.000000
1108         """))
1109
1110  def test_app_process_starts(self):
1111    return DiffTestBlueprint(
1112        trace=DataPath('sched_wakeup_trace.atr'),
1113        query="""
1114        INCLUDE PERFETTO MODULE android.app_process_starts;
1115        SELECT
1116        process_name,
1117        pid,
1118        intent,
1119        reason,
1120        proc_start_ts,
1121        proc_start_dur,
1122        bind_app_ts,
1123        bind_app_dur,
1124        intent_ts,
1125        intent_dur,
1126        total_dur
1127        FROM android_app_process_starts
1128        ORDER BY proc_start_ts
1129      """,
1130        out=Csv("""
1131        "process_name","pid","intent","reason","proc_start_ts","proc_start_dur","bind_app_ts","bind_app_dur","intent_ts","intent_dur","total_dur"
1132        "com.android.providers.media.module",3487,"com.android.providers.media.fuse.ExternalStorageServiceImpl","service",1737343157905,6527831,1737386174098,156129409,1737542356088,2114114,201312297
1133        "com.android.externalstorage",3549," android.os.storage.action.VOLUME_STATE_CHANGED","broadcast",1739987238947,9277039,1740045665263,20602351,1740066288912,1480586,80530551
1134      """))
1135
1136  def test_garbage_collection(self):
1137    return DiffTestBlueprint(
1138        trace=DataPath('sched_wakeup_trace.atr'),
1139        query="""
1140        INCLUDE PERFETTO MODULE android.garbage_collection;
1141        SELECT
1142        tid,
1143        pid,
1144        thread_name,
1145        process_name,
1146        gc_type,
1147        is_mark_compact,
1148        reclaimed_mb,
1149        min_heap_mb,
1150        max_heap_mb
1151        gc_ts,
1152        gc_dur,
1153        gc_running_dur,
1154        gc_runnable_dur,
1155        gc_unint_io_dur,
1156        gc_unint_non_io_dur,
1157        gc_int_dur
1158        FROM android_garbage_collection_events
1159        ORDER BY tid, gc_ts
1160      """,
1161        out=Csv("""
1162        "tid","pid","thread_name","process_name","gc_type","is_mark_compact","reclaimed_mb","min_heap_mb","gc_ts","gc_dur","gc_running_dur","gc_runnable_dur","gc_unint_io_dur","gc_unint_non_io_dur","gc_int_dur"
1163        2013,2003,"HeapTaskDaemon","android.process.media","collector_transition",0,0.670000,2.153000,2.823000,326468170,138781185,177630899,0,0,10056086
1164        3494,3487,"HeapTaskDaemon","com.android.providers.media.module","young",0,"[NULL]","[NULL]","[NULL]",213263593,164870500,29632860,0,0,12881595
1165        3494,3487,"HeapTaskDaemon","com.android.providers.media.module","collector_transition",0,1.248000,2.201000,3.449000,169735717,135385084,24036227,0,1301,10313105
1166        3556,3549,"HeapTaskDaemon","com.android.externalstorage","collector_transition",0,0.450000,2.038000,2.488000,166379142,123781761,32547509,0,0,10049872
1167        """))
1168
1169  def test_garbage_collection_stats(self):
1170    return DiffTestBlueprint(
1171        trace=DataPath('android_postboot_unlock.pftrace'),
1172        query="""
1173        INCLUDE PERFETTO MODULE android.garbage_collection;
1174        SELECT
1175        ts, dur,
1176        heap_size_mbs, heap_size_mb,
1177        heap_allocated_mb, heap_allocation_rate,
1178        heap_live_mbs, heap_total_mbs, heap_utilization,
1179        gc_running_dur, gc_running_rate, gc_running_efficiency,
1180        gc_during_android_startup_dur,
1181        total_android_startup_dur,
1182        gc_during_android_startup_rate,
1183        gc_during_android_startup_efficiency
1184        FROM _android_garbage_collection_stats
1185      """,
1186        out=Csv("""
1187        "ts","dur","heap_size_mbs","heap_size_mb","heap_allocated_mb","heap_allocation_rate","heap_live_mbs","heap_total_mbs","heap_utilization","gc_running_dur","gc_running_rate","gc_running_efficiency","gc_during_android_startup_dur","total_android_startup_dur","gc_during_android_startup_rate","gc_during_android_startup_efficiency"
1188        37574228004,2590476076,545.245650,210.480867,157.435000,60.774543,21.891720,53.434636,0.409692,80862916,0.031215,1351.232099,177436890,675663737,0.262611,160.615132
1189        """))
1190
1191  def test_garbage_collection_stats_b384732321(self):
1192    """Regression test for a case where we see startup dur of -1"""
1193    return DiffTestBlueprint(
1194        trace=TextProto(r"""
1195        packet: {
1196          system_info: {
1197            android_sdk_version: 35
1198          }
1199        }
1200        packet {
1201          ftrace_events {
1202            cpu: 1
1203            event: {
1204              timestamp: 10
1205              pid: 1
1206              print: {
1207                buf:
1208                  "F|1|launchingActivity#1|0\n"
1209              }
1210            }
1211            event: {
1212              timestamp: 12
1213              pid: 1
1214              print: {
1215                buf:
1216                  "I|1|launchingActivity#1:completed-warm:com.android.phone\n"
1217              }
1218            }
1219            event: {
1220              timestamp: 1000
1221              pid: 2
1222              print: {
1223                buf:
1224                  "S|2|launchingActivity#1|0\n"
1225              }
1226            }
1227          }
1228        }
1229        """),
1230        query="""
1231        INCLUDE PERFETTO MODULE android.garbage_collection;
1232        SELECT COUNT() as count from _android_garbage_collection_stats
1233      """,
1234        out=Csv("""
1235        "count"
1236        1
1237        """))
1238
1239  def test_input_events(self):
1240    return DiffTestBlueprint(
1241        trace=DataPath('post_boot_trace.atr'),
1242        query="""
1243        INCLUDE PERFETTO MODULE android.input;
1244        SELECT
1245        total_latency_dur,
1246        handling_latency_dur,
1247        dispatch_latency_dur,
1248        tid,
1249        thread_name,
1250        pid,
1251        process_name,
1252        event_type,
1253        event_seq,
1254        event_channel,
1255        dispatch_ts,
1256        dispatch_dur,
1257        receive_ts,
1258        receive_dur
1259        FROM android_input_events
1260        ORDER BY dispatch_ts
1261        LIMIT 10
1262      """,
1263        out=Csv("""
1264        "total_latency_dur","handling_latency_dur","dispatch_latency_dur","tid","thread_name","pid","process_name","event_type","event_seq","event_channel","dispatch_ts","dispatch_dur","receive_ts","receive_dur"
1265        377149054,77503,377032734,7493,"ndroid.systemui",7493,"com.android.systemui","0x3","0x1","4325794 NotificationShade (server)",578307771330,1292,578684804064,1412
1266        1684318,772908,48433,7493,"ndroid.systemui",7493,"com.android.systemui","0x1","0x2","a0526ca NavigationBar0 (server)",581956322279,1299,581956370712,1806
1267        22069988,12614508,804831,7493,"ndroid.systemui",7493,"com.android.systemui","0x1","0x3","4325794 NotificationShade (server)",581956391308,1212,581957196139,1362
1268        1603522,645723,75328,7964,"droid.launcher3",7964,"com.android.launcher3","0x1","0x4","[Gesture Monitor] swipe-up (server)",581956445376,1232,581956520704,1708
1269        1583707,644313,208973,7310,"android.ui",7288,"system_server","0x1","0x5","PointerEventDispatcher0 (server)",581956495788,1208,581956704761,1281
1270        22622740,22582066,25729,7493,"ndroid.systemui",7493,"com.android.systemui","0x1","0x6","4325794 NotificationShade (server)",582019627670,1230,582019653399,1607
1271        20228399,20116160,95263,7964,"droid.launcher3",7964,"com.android.launcher3","0x1","0x7","[Gesture Monitor] swipe-up (server)",582019685639,1309,582019780902,1942
1272        459763,287436,27342,7310,"android.ui",7288,"system_server","0x1","0x8","PointerEventDispatcher0 (server)",582019737156,1192,582019764498,1664
1273        9848456,9806401,22714,7493,"ndroid.systemui",7493,"com.android.systemui","0x1","0x9","4325794 NotificationShade (server)",582051061377,1227,582051084091,1596
1274        5533919,5487703,25013,7964,"droid.launcher3",7964,"com.android.launcher3","0x1","0xa","[Gesture Monitor] swipe-up (server)",582051112236,1258,582051137249,1771
1275      """))
1276
1277  def test_job_scheduler_events(self):
1278    return DiffTestBlueprint(
1279        trace=DataPath('post_boot_trace.atr'),
1280        query="""
1281        INCLUDE PERFETTO MODULE android.job_scheduler;
1282        SELECT job_id, uid, package_name, job_service_name, ts, dur FROM android_job_scheduler_events ORDER BY ts
1283      """,
1284        out=Csv("""
1285        "job_id","uid","package_name","job_service_name","ts","dur"
1286        237039804,1000,"android","com.android.server.notification.NotificationHistoryJobService$system",575488743679,10909825
1287        201,10060,"com.android.dialer","com.android.voicemail.impl.StatusCheckJobService",579210443477,15650722
1288        -300,10089,"com.android.providers.media.module","com.android.providers.media.MediaService",579448376938,1716731633
1289        7,10085,"com.android.devicelockcontroller","androidx.work.impl.background.systemjob.SystemJobService",579645356805,148784109
1290        2,10058,"com.android.imsserviceentitlement",".fcm.FcmRegistrationService",580025518616,47458225
1291        1000,10071,"com.android.messaging",".datamodel.action.ActionServiceImpl",581680366145,327541238
1292        1001,10071,"com.android.messaging",".datamodel.action.BackgroundWorkerService",581948976360,90502706
1293        1000,10071,"com.android.messaging",".datamodel.action.ActionServiceImpl",582038224048,65747884
1294        7,10088,"com.android.rkpdapp","androidx.work.impl.background.systemjob.SystemJobService",582582119592,103911382
1295        7,10037,"com.android.statementservice","androidx.work.impl.background.systemjob.SystemJobService",583151483122,115767494
1296        27950934,10022,"com.android.providers.calendar",".CalendarProviderJobService",587237955847,37434516
1297        """))
1298
1299  def test_freezer_events(self):
1300    return DiffTestBlueprint(
1301        trace=DataPath('freezer_trace.atr'),
1302        query="""
1303        INCLUDE PERFETTO MODULE android.freezer;
1304        SELECT pid, ts, dur, unfreeze_reason_int, unfreeze_reason_str FROM android_freezer_events ORDER BY ts
1305      """,
1306        out=Csv("""
1307        "pid","ts","dur","unfreeze_reason_int","unfreeze_reason_str"
1308        6506,91266310231819,94699935803,"[NULL]","[NULL]"
1309        3804,91266322277324,94687890298,"[NULL]","[NULL]"
1310        3299,91281767065245,78699885147,6,"start_service"
1311        5782,91296291190245,64718977377,"[NULL]","[NULL]"
1312        6533,91296292403211,64717764411,"[NULL]","[NULL]"
1313        4044,91296293188372,64716979250,"[NULL]","[NULL]"
1314        4002,91296294215356,64715952266,"[NULL]","[NULL]"
1315        3981,91296294804650,64715362972,"[NULL]","[NULL]"
1316        """))
1317
1318  def test_service_bindings(self):
1319    return DiffTestBlueprint(
1320        trace=DataPath('post_boot_trace.atr'),
1321        query="""
1322        INCLUDE PERFETTO MODULE android.services;
1323        SELECT
1324        client_oom_score,
1325        client_process,
1326        client_thread,
1327        client_pid,
1328        client_tid,
1329        client_ts,
1330        client_dur,
1331        server_oom_score,
1332        server_process,
1333        server_thread,
1334        server_tid,
1335        server_pid,
1336        server_ts,
1337        server_dur,
1338        token,
1339        act,
1340        cmp,
1341        flg,
1342        bind_seq
1343        FROM android_service_bindings
1344        ORDER BY client_tid, client_ts
1345        LIMIT 10
1346      """,
1347        out=Csv("""
1348        "client_oom_score","client_process","client_thread","client_pid","client_tid","client_ts","client_dur","server_oom_score","server_process","server_thread","server_tid","server_pid","server_ts","server_dur","token","act","cmp","flg","bind_seq"
1349        -900,"system_server","system_server",7288,7288,577830735575,0,0,"android.ext.services","binder:7732_3",7764,7732,577866081720,9755069,"android.os.BinderProxy@a0dc800","android.service.notification.NotificationAssistantService","android.ext.services/.notification.Assistant","[NULL]",21
1350        -900,"system_server","eduling.default",7288,7366,579204777498,0,0,"com.android.dialer","binder:8075_2",8097,8075,579207718770,13090141,"android.os.BinderProxy@9a28fdf","[NULL]","com.android.dialer/com.android.voicemail.impl.StatusCheckJobService","0x4",29
1351        -900,"system_server","eduling.default",7288,7366,580022869386,0,0,"com.android.imsserviceentitlement","binder:8647_1",8667,8647,580027477378,1982139,"android.os.BinderProxy@27f8e83","[NULL]","com.android.imsserviceentitlement/.fcm.FcmRegistrationService","0x4",35
1352        -900,"system_server","StorageManagerS",7288,7397,587754918358,0,-700,"com.android.providers.media.module","binder:8294_1",8327,8294,587757305854,2691423,"android.os.BinderProxy@73b68b5","[NULL]","com.android.providers.media.module/com.android.providers.media.fuse.ExternalStorageServiceImpl","[NULL]",44
1353        -800,"com.android.systemui","ndroid.systemui",7493,7493,572995972978,8071106,-800,"com.android.systemui","binder:7493_4",7682,7493,573131280194,17181314,"android.os.BinderProxy@1c2ac60","android.service.wallpaper.WallpaperService","com.android.systemui/.wallpapers.ImageWallpaper","[NULL]",14
1354        -800,"com.android.systemui","ndroid.systemui",7493,7493,572995972978,8071106,-800,"com.android.systemui","binder:7493_4",7682,7493,577000518511,6977972,"android.os.BinderProxy@b18137","[NULL]","com.android.systemui/.keyguard.KeyguardService","0x100",15
1355        -800,"com.android.networkstack.process","rkstack.process",7610,7610,571078334504,7552850,-800,"com.android.networkstack.process","binder:7610_1",7633,7610,571090652307,74610898,"android.os.BinderProxy@ee1090b","android.net.INetworkStackConnector","com.android.networkstack/com.android.server.NetworkStackService","[NULL]",2
1356        -800,"com.android.networkstack.process","rkstack.process",7610,7610,571078334504,7552850,-800,"com.android.networkstack.process","binder:7610_1",7633,7610,571489537275,1570460,"android.os.BinderProxy@a0dc800","android.net.ITetheringConnector","com.android.networkstack.tethering/.TetheringService","[NULL]",3
1357        0,"com.android.bluetooth","droid.bluetooth",7639,7639,571248973750,9874358,-700,"com.android.bluetooth","binder:7639_2",7672,7639,571871169647,6460322,"android.os.BinderProxy@7482132","android.bluetooth.IBluetooth","com.android.bluetooth/.btservice.AdapterService","[NULL]",4
1358        -700,"com.android.bluetooth","droid.bluetooth",7639,7639,572342110044,4874276,-700,"com.android.bluetooth","binder:7639_2",7672,7639,572466393291,1404185,"android.os.BinderProxy@ce5a6fc","android.media.browse.MediaBrowserService","com.android.bluetooth/.avrcpcontroller.BluetoothMediaBrowserService","[NULL]",10
1359      """))
1360
1361  def test_oom_adjuster_transitions(self):
1362    return DiffTestBlueprint(
1363        trace=DataPath('sched_wakeup_trace.atr'),
1364        query="""
1365        INCLUDE PERFETTO MODULE android.oom_adjuster;
1366        SELECT
1367        ts,
1368        dur,
1369        score,
1370        bucket,
1371        process_name,
1372        oom_adj_ts,
1373        oom_adj_dur,
1374        oom_adj_thread_name,
1375        oom_adj_reason,
1376        oom_adj_trigger
1377        FROM android_oom_adj_intervals
1378        WHERE oom_adj_reason IS NOT NULL
1379        ORDER BY ts
1380        LIMIT 10
1381      """,
1382        out=Csv("""
1383        "ts","dur","score","bucket","process_name","oom_adj_ts","oom_adj_dur","oom_adj_thread_name","oom_adj_reason","oom_adj_trigger"
13841737065264829,701108081,925,"cached","com.android.providers.calendar",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13851737066678827,3470211742,935,"cached","com.android.imsserviceentitlement",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13861737066873002,3470017567,945,"cached","com.android.carrierconfig",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13871737067058812,3469831757,955,"cached","com.android.messaging",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13881737067246975,699224817,955,"cached","android.process.acore",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13891737068421919,3468468650,965,"cached","com.android.shell",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13901737068599673,697908135,965,"cached","android.process.media",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13911737068933602,3467956967,975,"cached","com.android.gallery3d",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13921737069091010,3467799559,975,"cached","com.android.packageinstaller",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
13931737069240534,3467650035,985,"cached","com.android.managedprovisioning",1737064421516,29484835,"binder:642_1","processEnd","IActivityManager#1598246212"
1394      """))
1395
1396  def test_broadcast_minsdk_u(self):
1397    return DiffTestBlueprint(
1398        trace=DataPath('freezer_trace.atr'),
1399        query="""
1400        INCLUDE PERFETTO MODULE android.broadcasts;
1401        SELECT record_id, intent_action, process_name, pid, process_queue_id, queue_id, ts, dur FROM _android_broadcasts_minsdk_u
1402        ORDER BY ts LIMIT 10
1403      """,
1404        out=Csv("""
1405        "record_id","intent_action","process_name","pid","process_queue_id","queue_id","ts","dur"
1406        "3cdfe8f","android.os.action.POWER_SAVE_TEMP_WHITELIST_CHANGED","system",2519,"d43f45d",0,91286297271477,221619
1407        "3df251c","android.intent.action.TIME_TICK","com.android.systemui",2762,"f0a77fa",0,91295942589896,469216
1408        "3df251c","android.intent.action.TIME_TICK","com.android.systemui",2762,"f0a77fa",0,91295943366025,313104
1409        "3df251c","android.intent.action.TIME_TICK","com.android.systemui",2762,"f0a77fa",0,91295943943713,356194
1410        "6e24ea1","android.intent.action.TIME_TICK","com.android.systemui",2762,"f0a77fa",0,91355941417856,444189
1411        "6e24ea1","android.intent.action.TIME_TICK","com.android.systemui",2762,"f0a77fa",0,91355942543001,405369
1412        "6e24ea1","android.intent.action.TIME_TICK","com.android.systemui",2762,"f0a77fa",0,91355943262781,339640
1413        "c24df76","android.intent.action.PACKAGE_NEEDS_INTEGRITY_VERIFICATION","system",2519,"d43f45d",0,91359865607938,862534
1414        "7fccf57","android.content.pm.action.SESSION_COMMITTED","com.android.launcher3",3219,"8e7639",0,91360380556725,15221753
1415        "1ef76b0","android.intent.action.PACKAGE_ADDED","system",2519,"d43f45d",0,91360396877398,107502
1416        """))
1417
1418
1419  def test_binder_breakdown(self):
1420    return DiffTestBlueprint(
1421        trace=DataPath('sched_wakeup_trace.atr'),
1422        query="""
1423        INCLUDE PERFETTO MODULE android.binder_breakdown;
1424        WITH x AS (
1425          SELECT reason, dur FROM android_binder_server_breakdown
1426          UNION ALL
1427          SELECT reason, dur FROM android_binder_client_breakdown
1428        ) SELECT reason, SUM(dur) AS dur FROM x GROUP BY reason ORDER BY dur
1429      """,
1430        out=Csv("""
1431        "reason","dur"
1432        "D",548774
1433        "io",705773
1434        "art_lock_contention",9500403
1435        "monitor_contention",76505897
1436        "R+",198506855
1437        "R",201261723
1438        "Running",608081756
1439        "binder",4174605447
1440        "S",5144384456
1441        """))
1442
1443  def test_binder_combined_breakdown(self):
1444    return DiffTestBlueprint(
1445        trace=DataPath('sched_wakeup_trace.atr'),
1446        query="""
1447        INCLUDE PERFETTO MODULE android.binder_breakdown;
1448        SELECT reason, reason_type, SUM(dur) as dur
1449        FROM android_binder_client_server_breakdown
1450        GROUP BY reason, reason_type
1451        ORDER BY dur
1452        """,
1453        out=Csv("""
1454        "reason","reason_type","dur"
1455        "D","client",10027
1456        "D","server",538747
1457        "io","server",705773
1458        "art_lock_contention","server",9500403
1459        "Running","client",16251671
1460        "R+","client",35969495
1461        "R","server",73026825
1462        "monitor_contention","server",76505897
1463        "R+","server",96093319
1464        "S","client",97692288
1465        "R","client",125510991
1466        "Running","server",584323718
1467        "binder","server",2106016239
1468        "S","server",2122622385
1469        """))
1470
1471  def test_android_charging_states_output(self):
1472    return DiffTestBlueprint(
1473        trace=DataPath('android_job_scheduler.perfetto-trace'),
1474        query="""
1475        INCLUDE PERFETTO MODULE android.battery.charging_states;
1476        SELECT ts, dur, charging_state FROM android_charging_states;
1477      """,
1478        out=Csv("""
1479        "ts","dur","charging_state"
1480        368604749651,59806073237,"Charging"
1481      """))
1482
1483  def test_android_job_scheduler_states_output(self):
1484    return DiffTestBlueprint(
1485        trace=DataPath('android_job_scheduler.perfetto-trace'),
1486        query="""
1487        INCLUDE PERFETTO MODULE android.job_scheduler_states;
1488        SELECT
1489          id,
1490          ts,
1491          dur,
1492          slice_id,
1493          job_name || '_' || job_id AS job_name,
1494          uid,
1495          job_id,
1496          package_name,
1497          job_namespace,
1498          effective_priority,
1499          has_battery_not_low_constraint,
1500          has_charging_constraint,
1501          has_connectivity_constraint,
1502          has_content_trigger_constraint,
1503          has_deadline_constraint,
1504          has_idle_constraint,
1505          has_storage_not_low_constraint,
1506          has_timing_delay_constraint,
1507          is_prefetch,
1508          is_requested_expedited_job,
1509          is_running_as_expedited_job,
1510          num_previous_attempts,
1511          requested_priority,
1512          standby_bucket,
1513          is_periodic,
1514          has_flex_constraint,
1515          is_requested_as_user_initiated_job,
1516          is_running_as_user_initiated_job,
1517          deadline_ms,
1518          job_start_latency_ms,
1519          num_uncompleted_work_items,
1520          proc_state,
1521          internal_stop_reason,
1522          public_stop_reason
1523        FROM android_job_scheduler_states;
1524      """,
1525        out=Csv("""
1526"id","ts","dur","slice_id","job_name","uid","job_id","package_name","job_namespace","effective_priority","has_battery_not_low_constraint","has_charging_constraint","has_connectivity_constraint","has_content_trigger_constraint","has_deadline_constraint","has_idle_constraint","has_storage_not_low_constraint","has_timing_delay_constraint","is_prefetch","is_requested_expedited_job","is_running_as_expedited_job","num_previous_attempts","requested_priority","standby_bucket","is_periodic","has_flex_constraint","is_requested_as_user_initiated_job","is_running_as_user_initiated_job","deadline_ms","job_start_latency_ms","num_uncompleted_work_items","proc_state","internal_stop_reason","public_stop_reason"
15271,377089754138,83200835,10,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286783",10090,-2746960329031286783,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_CANCELLED","STOP_REASON_CANCELLED_BY_APP"
15282,385507499374,111746552,17,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286782",10090,-2746960329031286782,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,6,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_SUCCESSFUL_FINISH","STOP_REASON_UNDEFINED"
15293,416753734715,129444346,53,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286781",10090,-2746960329031286781,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,5,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_SUCCESSFUL_FINISH","STOP_REASON_UNDEFINED"
15304,422530232411,86735906,59,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286780",10090,-2746960329031286780,"com.android.providers.media.module","androidx.work.systemjobscheduler",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_SUCCESSFUL_FINISH","STOP_REASON_UNDEFINED"
1531      """))
1532
1533  def test_android_job_scheduler_with_screen_charging_output(self):
1534    return DiffTestBlueprint(
1535        trace=DataPath('android_job_scheduler.perfetto-trace'),
1536        query="""
1537        INCLUDE PERFETTO MODULE android.job_scheduler_states;
1538        SELECT
1539          ts,
1540          dur,
1541          slice_id,
1542          job_name,
1543          uid,
1544          job_id,
1545          job_dur,
1546          package_name,
1547          job_namespace,
1548          charging_state,
1549          screen_state,
1550          effective_priority,
1551          has_battery_not_low_constraint,
1552          has_charging_constraint,
1553          has_connectivity_constraint,
1554          has_content_trigger_constraint,
1555          has_deadline_constraint,
1556          has_idle_constraint,
1557          has_storage_not_low_constraint,
1558          has_timing_delay_constraint,
1559          is_prefetch,
1560          is_requested_expedited_job,
1561          is_running_as_expedited_job,
1562          num_previous_attempts,
1563          requested_priority,
1564          standby_bucket,
1565          is_periodic,
1566          has_flex_constraint,
1567          is_requested_as_user_initiated_job,
1568          is_running_as_user_initiated_job,
1569          deadline_ms,
1570          job_start_latency_ms,
1571          num_uncompleted_work_items,
1572          proc_state,
1573          internal_stop_reason,
1574          public_stop_reason
1575        from android_job_scheduler_with_screen_charging_states;
1576      """,
1577        out=Csv("""
1578        "ts","dur","slice_id","job_name","uid","job_id","job_dur","package_name","job_namespace","charging_state","screen_state","effective_priority","has_battery_not_low_constraint","has_charging_constraint","has_connectivity_constraint","has_content_trigger_constraint","has_deadline_constraint","has_idle_constraint","has_storage_not_low_constraint","has_timing_delay_constraint","is_prefetch","is_requested_expedited_job","is_running_as_expedited_job","num_previous_attempts","requested_priority","standby_bucket","is_periodic","has_flex_constraint","is_requested_as_user_initiated_job","is_running_as_user_initiated_job","deadline_ms","job_start_latency_ms","num_uncompleted_work_items","proc_state","internal_stop_reason","public_stop_reason"
1579377089754138,83200835,10,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286783",10090,-2746960329031286783,83200835,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_CANCELLED","STOP_REASON_CANCELLED_BY_APP"
1580385507499374,111746552,17,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286782",10090,-2746960329031286782,111746552,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,6,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_SUCCESSFUL_FINISH","STOP_REASON_UNDEFINED"
1581416753734715,129444346,53,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286781",10090,-2746960329031286781,129444346,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,5,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_SUCCESSFUL_FINISH","STOP_REASON_UNDEFINED"
1582422530232411,86735906,59,"@androidx.work.systemjobscheduler@com.android.providers.media.module/androidx.work.impl.background.systemjob.SystemJobService_-2746960329031286780",10090,-2746960329031286780,86735906,"com.android.providers.media.module","androidx.work.systemjobscheduler","Charging","Unknown",400,1,0,0,0,0,0,0,0,0,0,0,0,400,"EXEMPTED",0,0,0,0,0,3,0,"PROCESS_STATE_PERSISTENT","INTERNAL_STOP_REASON_SUCCESSFUL_FINISH","STOP_REASON_UNDEFINED"
1583      """))
1584