1#!/usr/bin/env python3 2# Copyright (C) 2024 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 17from python.generators.diff_tests.testing import Csv, TextProto 18from python.generators.diff_tests.testing import DiffTestBlueprint 19from python.generators.diff_tests.testing import TestSuite 20 21 22class Startups(TestSuite): 23 24 def test_hot_startups(self): 25 return DiffTestBlueprint( 26 trace=DataPath('api31_startup_hot.perfetto-trace'), 27 query=""" 28 INCLUDE PERFETTO MODULE android.startup.startups; 29 SELECT * FROM android_startups; 30 """, 31 out=Csv(""" 32 "startup_id","ts","ts_end","dur","package","startup_type" 33 0,186969441973689,186969489302704,47329015,"androidx.benchmark.integration.macrobenchmark.target","hot" 34 """)) 35 36 def test_warm_startups(self): 37 return DiffTestBlueprint( 38 trace=DataPath('api31_startup_warm.perfetto-trace'), 39 query=""" 40 INCLUDE PERFETTO MODULE android.startup.startups; 41 SELECT * FROM android_startups; 42 """, 43 out=Csv(""" 44 "startup_id","ts","ts_end","dur","package","startup_type" 45 0,186982050780778,186982115528805,64748027,"androidx.benchmark.integration.macrobenchmark.target","warm" 46 """)) 47 48 def test_cold_startups(self): 49 return DiffTestBlueprint( 50 trace=DataPath('api31_startup_cold.perfetto-trace'), 51 query=""" 52 INCLUDE PERFETTO MODULE android.startup.startups; 53 SELECT * FROM android_startups; 54 """, 55 out=Csv(""" 56 "startup_id","ts","ts_end","dur","package","startup_type" 57 0,186974938196632,186975083989042,145792410,"androidx.benchmark.integration.macrobenchmark.target","cold" 58 """)) 59 60 def test_hot_startups_maxsdk28(self): 61 return DiffTestBlueprint( 62 trace=DataPath('api24_startup_hot.perfetto-trace'), 63 query=""" 64 INCLUDE PERFETTO MODULE android.startup.startups; 65 SELECT * FROM android_startups; 66 """, 67 out=Csv(""" 68 "startup_id","ts","ts_end","dur","package","startup_type" 69 0,779860286416,779893485322,33198906,"com.google.android.googlequicksearchbox","hot" 70 1,780778904571,780813944498,35039927,"androidx.benchmark.integration.macrobenchmark.target","hot" 71 """)) 72 73 def test_warm_startups_maxsdk28(self): 74 return DiffTestBlueprint( 75 trace=DataPath('api24_startup_warm.perfetto-trace'), 76 query=""" 77 INCLUDE PERFETTO MODULE android.startup.startups; 78 SELECT * FROM android_startups; 79 """, 80 out=Csv(""" 81 "startup_id","ts","ts_end","dur","package","startup_type" 82 0,799979565075,800014194731,34629656,"com.google.android.googlequicksearchbox","hot" 83 1,800868511677,800981929562,113417885,"androidx.benchmark.integration.macrobenchmark.target","[NULL]" 84 """)) 85 86 def test_cold_startups_maxsdk28(self): 87 return DiffTestBlueprint( 88 trace=DataPath('api24_startup_cold.perfetto-trace'), 89 query=""" 90 INCLUDE PERFETTO MODULE android.startup.startups; 91 SELECT * FROM android_startups; 92 """, 93 out=Csv(""" 94 "startup_id","ts","ts_end","dur","package","startup_type" 95 0,791231114368,791501060868,269946500,"androidx.benchmark.integration.macrobenchmark.target","[NULL]" 96 """)) 97 98 def test_android_startup_time_to_display_hot_maxsdk28(self): 99 return DiffTestBlueprint( 100 trace=DataPath('api24_startup_hot.perfetto-trace'), 101 query=""" 102 INCLUDE PERFETTO MODULE android.startup.time_to_display; 103 SELECT * FROM android_startup_time_to_display; 104 """, 105 out=Csv(""" 106 "startup_id","time_to_initial_display","time_to_full_display","ttid_frame_id","ttfd_frame_id","upid" 107 0,33198906,"[NULL]",1,"[NULL]",355 108 1,35039927,537343160,4,5,383 109 """)) 110 111 def test_android_startup_time_to_display_warm_maxsdk28(self): 112 return DiffTestBlueprint( 113 trace=DataPath('api24_startup_warm.perfetto-trace'), 114 query=""" 115 INCLUDE PERFETTO MODULE android.startup.time_to_display; 116 SELECT * FROM android_startup_time_to_display; 117 """, 118 out=Csv(""" 119 "startup_id","time_to_initial_display","time_to_full_display","ttid_frame_id","ttfd_frame_id","upid" 120 0,34629656,"[NULL]",1,"[NULL]",355 121 1,108563770,581026583,4,5,388 122 """)) 123 124 def test_android_startup_time_to_display_cold_maxsdk28(self): 125 return DiffTestBlueprint( 126 trace=DataPath('api24_startup_cold.perfetto-trace'), 127 query=""" 128 INCLUDE PERFETTO MODULE android.startup.time_to_display; 129 SELECT * FROM android_startup_time_to_display; 130 """, 131 out=Csv(""" 132 "startup_id","time_to_initial_display","time_to_full_display","ttid_frame_id","ttfd_frame_id","upid" 133 0,264869885,715406822,65,66,396 134 """)) 135 136 def test_android_startup_time_to_display_hot(self): 137 return DiffTestBlueprint( 138 trace=DataPath('api31_startup_hot.perfetto-trace'), 139 query=""" 140 INCLUDE PERFETTO MODULE android.startup.time_to_display; 141 SELECT * FROM android_startup_time_to_display; 142 """, 143 out=Csv(""" 144 "startup_id","time_to_initial_display","time_to_full_display","ttid_frame_id","ttfd_frame_id","upid" 145 0,40534066,542222554,5872867,5872953,184 146 """)) 147 148 def test_android_startup_time_to_display_warm(self): 149 return DiffTestBlueprint( 150 trace=DataPath('api31_startup_warm.perfetto-trace'), 151 query=""" 152 INCLUDE PERFETTO MODULE android.startup.time_to_display; 153 SELECT * FROM android_startup_time_to_display; 154 """, 155 out=Csv(""" 156 "startup_id","time_to_initial_display","time_to_full_display","ttid_frame_id","ttfd_frame_id","upid" 157 0,62373965,555968701,5873800,5873889,185 158 """)) 159 160 def test_android_startup_time_to_display_cold(self): 161 return DiffTestBlueprint( 162 trace=DataPath('api31_startup_cold.perfetto-trace'), 163 query=""" 164 INCLUDE PERFETTO MODULE android.startup.time_to_display; 165 SELECT * FROM android_startup_time_to_display; 166 """, 167 out=Csv(""" 168 "startup_id","time_to_initial_display","time_to_full_display","ttid_frame_id","ttfd_frame_id","upid" 169 0,143980066,620815843,5873276,5873353,229 170 """)) 171 172 def test_android_startup_breakdown(self): 173 return DiffTestBlueprint( 174 trace=DataPath('api31_startup_cold.perfetto-trace'), 175 query=""" 176 INCLUDE PERFETTO MODULE android.startup.startup_breakdowns; 177 SELECT 178 SUM(dur) AS dur, 179 reason 180 FROM android_startup_opinionated_breakdown 181 GROUP BY reason ORDER BY dur DESC; 182 """, 183 out=Csv(""" 184 "dur","reason" 185 28663023,"choreographer_do_frame" 186 22564487,"binder" 187 22011252,"launch_delay" 188 16351925,"Running" 189 13212137,"activity_start" 190 10264635,"io" 191 6779947,"inflate" 192 6240207,"bind_application" 193 5214375,"R+" 194 3072397,"resources_manager_get_resources" 195 2722869,"D" 196 2574273,"open_dex_files_from_oat" 197 2392761,"S" 198 2353124,"activity_resume" 199 1325727,"R" 200 43698,"art_lock_contention" 201 5573,"verify_class" 202 """)) 203