1-- 2-- Copyright 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 at 7-- 8-- https://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 16CREATE PERFETTO FUNCTION _remove_lambda_name( 17 -- Raw slice name containing at least one "$" 18 name STRING 19) 20-- Removes everything after the first "$" 21RETURNS STRING AS 22SELECT 23 __intrinsic_strip_hex(substr($name, 0, instr($name, "$")), 2) AS end; 24 25CREATE PERFETTO FUNCTION _standardize_wakelock_slice_name( 26 -- Raw slice name 27 name STRING 28) 29-- E.g.: Wakelock(epolld280:system_serve 30-- To: Wakelock(epolld<...>:system_serve 31RETURNS STRING AS 32SELECT 33 CASE 34 WHEN $name GLOB "Wakelock(epolld*" OR $name GLOB "Wakelock(epollm*" 35 THEN CASE 36 WHEN instr($name, ":") > 0 37 THEN substr( 38 $name, 39 1, 40 CASE 41 WHEN $name GLOB "Wakelock(epolld*" 42 THEN instr($name, "epolld") + length("epolld") - 1 43 WHEN $name GLOB "Wakelock(epollm*" 44 THEN instr($name, "epollm") + length("epollm") - 1 45 ELSE 0 46 END 47 ) || "<...>" || substr($name, instr($name, ":"), length($name)) 48 ELSE __intrinsic_strip_hex($name, 2) 49 END 50 ELSE __intrinsic_strip_hex($name, 2) 51 END; 52 53CREATE PERFETTO FUNCTION _standardize_vsync_slice_name( 54 -- Raw slice name containing a reference of "*vsync*" 55 name STRING 56) 57-- standardized name of vsync slices 58RETURNS STRING AS 59SELECT 60 CASE 61 WHEN $name GLOB "beginFrame*" 62 THEN "beginFrame <...>" 63 WHEN $name GLOB "frameIsEarly*" 64 THEN "frameIsEarly <...>" 65 WHEN $name GLOB "*vsync*in*" 66 THEN "vsync in <...>" 67 WHEN $name GLOB "present for*vsyncIn*" 68 THEN "present for vsync in <...>" 69 WHEN $name GLOB "wait for earliest present time*" 70 THEN "wait for earliest present time <vsync>" 71 WHEN $name GLOB "present for Common Panel*" 72 THEN "present for Common Panel" 73 WHEN $name GLOB "frameTimelineInfo*" 74 THEN "frameTimelineInfo <...>" 75 WHEN $name GLOB "*setFrameTimelineInfo*" 76 THEN "setFrameTimelineInfo <...>" 77 WHEN $name GLOB "*AChoreographer_vsyncCallback*" 78 THEN "AChoreographer_vsyncCallback <...>" 79 WHEN $name GLOB "unsync-vsync-id=* isSfChoreo=false" 80 THEN "unsync-vsync-id=<...> isSfChoreo=false" 81 WHEN $name GLOB "unsync-vsync-id=* isSfChoreo=true" 82 THEN "unsync-vsync-id=<...> isSfChoreo=true" 83 WHEN $name GLOB "Discarding old vsync*" 84 THEN "Discarding old vsync" 85 WHEN $name GLOB "setDisplayModePtr*" 86 THEN "setDisplayModePtr" 87 WHEN $name GLOB "adjusting vsync by*" 88 THEN "adjusting vsync by <...>" 89 WHEN $name GLOB "Not-Adjusting vsync by*" 90 THEN "Not-Adjusting vsync by <...>" 91 WHEN $name GLOB "dropping stale frameNumber*" 92 THEN "dropping stale frameNumber <...>" 93 WHEN $name GLOB "Sensor event from com.google.sensor.camera_vsync*" 94 THEN "Sensor event from com.google.sensor.camera_vsync <...>" 95 WHEN $name GLOB "*DisplayInfo*" 96 THEN "DisplayInfo <...>" 97 WHEN $name GLOB "Choreographer#onVsync*" 98 THEN "Choreographer#onVsync<...>" 99 WHEN $name GLOB "appSf alarm*;*VSYNC in*" 100 THEN "appSf alarm in <...>; vsync in <...>" 101 WHEN $name GLOB "sf alarm*;*VSYNC in*" 102 THEN "sf alarm in <...>; vsync in <...>" 103 WHEN $name GLOB "app alarm*;*VSYNC in*" 104 THEN "app alarm in <...>; vsync in <...>" 105 WHEN $name GLOB "FT#*" 106 THEN "FT#FrameTrackerEvent" 107 WHEN $name GLOB "*isVsyncValid*" 108 THEN "isVsyncValid <...>" 109 WHEN $name GLOB "onHardwareVsyncRequest*" 110 THEN "onHardwareVsyncRequest <...>" 111 WHEN $name GLOB "onComposerHalVsync*" 112 THEN "onComposerHalVsync <...>" 113 WHEN $name GLOB "ensureMinFrameDurationIsKept*mNumVsyncsForFrame=*mPastExpectedPresentTimes.size()=*" 114 THEN "ensureMinFrameDurationIsKept mNumVsyncsForFrame=<...> mPastExpectedPresentTimes.size()=<...>" 115 WHEN $name GLOB "*lastVsyncDelta*" 116 THEN "lastVsyncDelta=<...>" 117 WHEN $name GLOB "mLastCommittedVsync in*" 118 THEN "mLastCommittedVsync in <...>" 119 ELSE __intrinsic_strip_hex($name, 2) 120 END; 121 122-- Some slice names have params in them. This functions removes them to make it 123-- possible to aggregate by name. 124-- Some examples are: 125-- - Lock/monitor contention slices. The name includes where the lock 126-- contention is in the code. That part is removed. 127-- - DrawFrames/ooFrame. The name also includes the frame number. 128-- - Apk/oat/dex loading: The name of the apk is removed 129CREATE PERFETTO FUNCTION android_standardize_slice_name( 130 -- The raw slice name. 131 name STRING 132) 133-- Simplified name. 134RETURNS STRING AS 135SELECT 136 CASE 137 WHEN $name GLOB "monitor contention with*" 138 THEN "monitor contention with <...>" 139 WHEN $name GLOB "SuspendThreadByThreadId*" 140 THEN "SuspendThreadByThreadId <...>" 141 WHEN $name GLOB "LoadApkAssetsFd*" 142 THEN "LoadApkAssetsFd <...>" 143 WHEN $name GLOB "relayoutWindow*" 144 THEN "relayoutWindow <...>" 145 WHEN $name GLOB "android.os.Handler: kotlinx.coroutines*" 146 THEN "CoroutineContinuation" 147 WHEN $name GLOB "Choreographer#doFrame*" 148 THEN "Choreographer#doFrame" 149 WHEN $name GLOB "DrawFrames*" 150 THEN "DrawFrames" 151 WHEN $name GLOB "AssetManager::OpenNonAsset*" 152 THEN "AssetManager::OpenNonAsset <...>" 153 WHEN $name GLOB "AssetManager::OpenXmlAsset*" 154 THEN "AssetManager::OpenXmlAsset <...>" 155 WHEN $name GLOB "AssetManager::OpenAsset*" 156 THEN "AssetManager::OpenAsset <...>" 157 WHEN $name GLOB "*AssetInputStream*" 158 THEN "AssetInputStream" 159 WHEN $name GLOB "openTypedAssetFile*" 160 THEN "openTypedAssetFile <...>" 161 WHEN $name GLOB "LoadApkAssets*" 162 THEN "LoadApkAssets <...>" 163 WHEN $name GLOB "*AssetLoader:*" 164 THEN "AssetLoader: <...>" 165 WHEN $name GLOB "JIT compiling*" 166 THEN "JIT compiling" 167 WHEN $name GLOB "requested config :*" 168 THEN "requested config : <...>" 169 WHEN $name GLOB "/data/app*.apk" 170 THEN "APK load" 171 WHEN $name GLOB "OpenDexFilesFromOat*" 172 THEN "OpenDexFilesFromOat" 173 WHEN $name GLOB "Open oat file*" 174 THEN "Open oat file" 175 WHEN $name GLOB "Open dex file*" 176 THEN "Open dex file" 177 WHEN $name GLOB "VdexFile*" 178 THEN "VdexFile" 179 WHEN $name GLOB "GC: Wait For*" 180 THEN "Garbage Collector" 181 WHEN $name GLOB "prepareDispatchCycleLocked*" 182 THEN "prepareDispatchCycleLocked <...>" 183 WHEN $name GLOB "enqueueDispatchEntryAndStartDispatchCycleLocked*" 184 THEN "enqueueDispatchEntryAndStartDispatchCycleLocked <...>" 185 WHEN $name GLOB "Layers: *" 186 THEN "Layers: <...>" 187 WHEN $name GLOB "* SurfaceView*(BLAST)#*" 188 THEN substr($name, instr($name, 'SurfaceView'), instr($name, '#') - instr($name, 'SurfaceView')) 189 WHEN $name GLOB "uid=*" 190 THEN "uid = <...>" 191 WHEN $name GLOB "wakeupap=*" 192 THEN "wakeupap = <...>" 193 WHEN $name GLOB "launchingActivity#*" 194 THEN "launchingActivity#<...>" 195 WHEN $name GLOB "updateUidStateUL*" 196 THEN "updateUidStateUL <...>" 197 WHEN $name GLOB "Wakelock(epolld*" OR $name GLOB "Wakelock(epollm*" 198 THEN _standardize_wakelock_slice_name($name) 199 WHEN $name GLOB "cpuhp*" 200 THEN "cpuhp<...>" 201 WHEN $name GLOB "atc*" 202 THEN "atc<...>" 203 WHEN $name GLOB "[0-9]* Alarm:*" 204 THEN "Alarm: <...>" 205 WHEN $name GLOB "[0-9]* Wifi:*" 206 THEN "Wifi: <...>" 207 WHEN $name GLOB "[0-9]* Sensor:*" 208 THEN "Sensor: <...>" 209 WHEN $name GLOB "*Cellular_data*" 210 THEN "Cellular_data <...>" 211 WHEN $name GLOB "*GET_ACTIVITY_INFO ModemActivityInfo*" 212 THEN "<...>GET_ACTIVITY_INFO ModemActivityInfo <...>" 213 WHEN $name GLOB "UNSOL_SIGNAL_STRENGTH*" 214 THEN "UNSOL_SIGNAL_STRENGTH <...>" 215 WHEN $name GLOB "*GET_CELL_INFO_LIST*" 216 THEN "<...> GET_CELL_INFO_LIST <...>" 217 WHEN $name GLOB "*VOICE_REGISTRATION_STATE*" 218 THEN "<...> VOICE_REGISTRATION_STATE <...>" 219 WHEN $name GLOB "*DATA_REGISTRATION_STATE*" 220 THEN "<...> DATA_REGISTRATION_STATE <...>" 221 -- E.g. InputConsumer processing on ClientState{e1d234a mUid=1234 mPid=1234 mSelfReportedDisplayId=0} (0xb000000000000000) 222 -- To InputConsumer processing on ClientState{<...>} (<...>) 223 WHEN $name GLOB "InputConsumer processing on ClientState*" 224 THEN "InputConsumer processing on ClientState<...>" 225 -- E.g. Transaction (ptz-fgd-1-LOCAL_MEDIA_REMOVE_DELETED_ITEMS_SYNC, 11910) 226 -- To: Transaction (ptz-fgd-1-LOCAL_MEDIA_REMOVE_DELETED_ITEMS_SYNC, <...>) 227 WHEN $name GLOB "Transaction (*, *)" 228 THEN CASE 229 WHEN $name GLOB "Transaction (Thread-*, *)" 230 THEN substr($name, 1, instr($name, "(")) || "Thread-<...>," || substr($name, instr($name, ","), length($name)) 231 ELSE substr($name, 1, instr($name, ",") + 1) || "<...>)" 232 END 233 -- E.g. Lock contention on thread list lock (owner tid: 1665) 234 -- To: Lock contention on thread list lock <...> 235 WHEN $name GLOB "Lock contention on* (*" 236 THEN substr($name, 0, instr($name, "(")) || "<...>" 237 -- Top level handlers slices heuristics: 238 -- E.g. android.os.Handler: com.android.systemui.qs.external.TileServiceManager$1 239 -- To: Handler: com.android.systemui.qs.external.TileServiceManager 240 WHEN $name GLOB "*Handler: *$*" 241 THEN _remove_lambda_name(substr($name, instr($name, "Handler:"))) 242 -- E.g. : android.view.ViewRootImpl$ViewRootHandler: com.android.systemui.someClass$enableMarquee$1 243 -- To: Handler: android.view.ViewRootImpl 244 WHEN $name GLOB "*.*.*: *$*" 245 THEN "Handler: " || _remove_lambda_name(substr($name, ": ")) 246 -- E.g.: android.os.AsyncTask$InternalHandler: #1 247 -- To: Handler: android.os.AsyncTask 248 WHEN $name GLOB "*.*$*: #*" 249 THEN "Handler: " || _remove_lambda_name($name) 250 WHEN $name GLOB "deliverInputEvent*" 251 THEN "deliverInputEvent <...>" 252 WHEN lower($name) GLOB "*vsync*" 253 THEN _standardize_vsync_slice_name($name) 254 ELSE __intrinsic_strip_hex($name, 2) 255 END; 256