1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ANIMATOR_MONITOR_H 17 #define ANIMATOR_MONITOR_H 18 19 #include <map> 20 #include <mutex> 21 #include "animator_monitor.h" 22 #include "perf_constants.h" 23 #include "perf_model.h" 24 #include "scene_monitor.h" 25 #include <set> 26 27 namespace OHOS { 28 namespace HiviewDFX { 29 30 class AnimatorMonitor : public IAnimatorCallback, public IFrameCallback { 31 public: 32 static AnimatorMonitor& GetInstance(); 33 AnimatorMonitor(); 34 ~AnimatorMonitor(); 35 // outer interface for animator 36 void RegisterAnimatorCallback(IAnimatorCallback* cb); 37 void UnregisterAnimatorCallback(IAnimatorCallback* cb); 38 void Start(const std::string& sceneId, PerfActionType type, const std::string& note); 39 void End(const std::string& sceneId, bool isRsRender); 40 void SetSubHealthInfo(const SubHealthInfo& info); 41 bool IsSubHealthScene(); 42 43 // inner interface for animator 44 void OnAnimatorStart(const std::string& sceneId, PerfActionType type, const std::string& note) override; 45 void OnAnimatorStop(const std::string& sceneId, bool isRsRender) override; 46 void OnVsyncEvent(int64_t vsyncTime, int64_t duration, double jank, const std::string& windowName) override; 47 bool RecordsIsEmpty(); 48 49 private: 50 void FlushDataBase(AnimatorRecord* record, DataBase& data); 51 void ReportAnimateStart(const std::string& sceneId, AnimatorRecord* record); 52 void ReportAnimateEnd(const std::string& sceneId, AnimatorRecord* record); 53 AnimatorRecord* GetRecord(const std::string& sceneId); 54 void RemoveRecord(const std::string& sceneId); 55 bool isValidSceneId(const std::string& sceneId); 56 57 mutable std::mutex mMutex; 58 int64_t subHealthRecordTime = 0; 59 std::vector<IAnimatorCallback*> animatorCallbacks; 60 std::map<std::string, AnimatorRecord*> mRecords; 61 std::set<std::string> validSceneIds = { 62 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_ICON, 63 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_NOTIFICATIONBAR, 64 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_NOTIFICATIONBAR_IN_LOCKSCREEN, 65 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_RECENT, 66 PerfConstants::START_APP_ANI_FORM, 67 PerfConstants::INTO_HOME_ANI, 68 PerfConstants::SCREENLOCK_SCREEN_OFF_ANIM, 69 PerfConstants::PASSWORD_UNLOCK_ANI, 70 PerfConstants::FACIAL_FLING_UNLOCK_ANI, 71 PerfConstants::FACIAL_UNLOCK_ANI, 72 PerfConstants::FINGERPRINT_UNLOCK_ANI, 73 PerfConstants::META_BALLS_TURBO_CHARGING_ANIMATION, 74 PerfConstants::ABILITY_OR_PAGE_SWITCH, 75 PerfConstants::LAUNCHER_APP_SWIPE_TO_HOME, 76 PerfConstants::APP_LIST_FLING, 77 PerfConstants::APP_SWIPER_FLING, 78 PerfConstants::APP_SWIPER_SCROLL, 79 PerfConstants::APP_TAB_SWITCH, 80 PerfConstants::VOLUME_BAR_SHOW, 81 PerfConstants::PC_APP_CENTER_GESTURE_OPERATION, 82 PerfConstants::PC_GESTURE_TO_RECENT, 83 PerfConstants::PC_SHORTCUT_SHOW_DESKTOP, 84 PerfConstants::PC_SHORTCUT_RESTORE_DESKTOP, 85 PerfConstants::PC_SHOW_DESKTOP_GESTURE_OPERATION, 86 PerfConstants::PC_ALT_TAB_TO_RECENT, 87 PerfConstants::PC_SHORTCUT_TO_RECENT, 88 PerfConstants::PC_EXIT_RECENT, 89 PerfConstants::PC_SHORTCUT_TO_APP_CENTER, 90 PerfConstants::PC_SHORTCUT_TO_APP_CENTER_ON_RECENT, 91 PerfConstants::PC_SHORTCUT_EXIT_APP_CENTER, 92 PerfConstants::APP_TRANSITION_TO_OTHER_APP, 93 PerfConstants::APP_TRANSITION_FROM_OTHER_APP, 94 PerfConstants::SNAP_RECENT_ANI, 95 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_DOCK, 96 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_MISSON, 97 PerfConstants::LAUNCHER_APP_BACK_TO_HOME, 98 PerfConstants::EXIT_RECENT_2_HOME_ANI, 99 PerfConstants::WINDOW_RECT_RESIZE, 100 PerfConstants::WINDOW_RECT_MOVE, 101 PerfConstants::SHOW_INPUT_METHOD_ANIMATION, 102 PerfConstants::HIDE_INPUT_METHOD_ANIMATION, 103 PerfConstants::SCREEN_ROTATION_ANI, 104 PerfConstants::CLOSE_FOLDER_ANI, 105 PerfConstants::LAUNCHER_SPRINGBACK_SCROLL, 106 PerfConstants::WINDOW_TITLE_BAR_MINIMIZED, 107 PerfConstants::APP_EXIT_FROM_WINDOW_TITLE_BAR_CLOSED, 108 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_OTHER, 109 PerfConstants::SCROLLER_ANIMATION, 110 PerfConstants::WINDOW_TITLE_BAR_MAXIMIZED, 111 PerfConstants::WINDOW_TITLE_BAR_RECOVER, 112 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_TRANSITION, 113 PerfConstants::ABILITY_OR_PAGE_SWITCH_INTERACTIVE, 114 PerfConstants::SCREENLOCK_SCREEN_INTO_PIN, 115 PerfConstants::CLEAR_1_RECENT_ANI, 116 PerfConstants::CLEAR_All_RECENT_ANI, 117 PerfConstants::RECENT_REALIGN_ANI, 118 PerfConstants::INTO_CC_ANI, 119 PerfConstants::EXIT_CC_ANI, 120 PerfConstants::INTO_CC_FROM_NC, 121 PerfConstants::INTO_CC_SUB_BLUETOOTH_ANI, 122 PerfConstants::EXIT_CC_SUB_BLUETOOTH_ANI, 123 PerfConstants::INTO_CC_SUB_WIFI_ANI, 124 PerfConstants::EXIT_CC_SUB_WIFI_ANI, 125 PerfConstants::INTO_CC_MEDIA_ANI, 126 PerfConstants::EXIT_CC_MEDIA_ANI, 127 PerfConstants::INTO_NC_ANI, 128 PerfConstants::INTO_NC_FROM_CC, 129 PerfConstants::CLEAR_NT_ANI, 130 PerfConstants::SCROLL_NC_LIST_ANI, 131 PerfConstants::EXIT_NC_ANI, 132 PerfConstants::VOLUME_BAR_CHANGE_ON, 133 PerfConstants::VOLUME_BAR_SLIDE, 134 PerfConstants::VOLUME_BAR_EXPAND, 135 PerfConstants::VOLUME_BAR_COLLAPSE, 136 PerfConstants::VOLUME_BAR_TOUCHED, 137 PerfConstants::FOLD_EXPAND_SPLIT_VIEW, 138 PerfConstants::FOLD_TO_EXPAND_AA, 139 PerfConstants::EXPAND_TO_FOLD_AA, 140 PerfConstants::FOLD_TO_EXPAND_DOCK_BACKGROUND_SCALE_TWO, 141 PerfConstants::EXPAND_TO_FOLD_INDICATOR, 142 PerfConstants::FOLD_TO_EXPAND_WINDOWS, 143 PerfConstants::EXPAND_TO_FOLD_WINDOWS, 144 PerfConstants::LAUNCHER_BIGFOLDER_OPEN, 145 PerfConstants::LAUNCHER_SMALLFOLDER_OPEN, 146 PerfConstants::LAUNCHER_FOLDER_OPEN, 147 PerfConstants::OPEN_ALBUM, 148 PerfConstants::OPEN_BROWSER, 149 PerfConstants::BROWSER_SWIPE, 150 PerfConstants::CLOSE_BROWSER, 151 PerfConstants::ANIMATE_TO_POSITION, 152 PerfConstants::EXPAND_SCREEN_ROTATION_ANI, 153 PerfConstants::CANTACTS_DIALER_BUTTON_PRESS, 154 PerfConstants::CONTACTS_DIALER_HIDE, 155 PerfConstants::CONTACTS_DIALER_SHOW, 156 PerfConstants::SCREENSHOT_SCALE_ANIMATION, 157 PerfConstants::SCREENSHOT_DISMISS_ANIMATION, 158 PerfConstants::SCREENSHOT_DISMISS_ANIMATION_BY_USER, 159 PerfConstants::SCREENRECORD_ANIMATION, 160 PerfConstants::SCREENRECORD_DISMISS_ANIMATION, 161 PerfConstants::SCREENRECORD_DISMISS_ANIMATION_BY_USER, 162 PerfConstants::AOD_TO_LOCKSCREEN, 163 PerfConstants::AOD_TO_LAUNCHER, 164 PerfConstants::LOCKSCREEN_TO_LAUNCHER, 165 PerfConstants::LOCKSCREEN_TO_AOD, 166 PerfConstants::LAUNCHER_TO_AOD, 167 PerfConstants::SCENE_CAP_TO_CARD_ANIM, 168 PerfConstants::SCENE_CARD_TO_CAP_ANIM, 169 PerfConstants::SCENE_LIST_TO_CAP_ANIM, 170 PerfConstants::SCENE_CAP_TO_LIST_ANIM, 171 PerfConstants::SCENE_LIST_SWIPE_ANIM, 172 PerfConstants::SCREENLOCK_INTO_EDITOR_ANIM, 173 PerfConstants::SCREENLOCK_EXIT_EDITOR_ANIM, 174 PerfConstants::SCREEN_OFF_TO_SCREENLOCK_END, 175 PerfConstants::SCROLL_2_AA, 176 PerfConstants::INTO_AA_ANI, 177 PerfConstants::EXIT_AA_ANI, 178 PerfConstants::INTO_SEARCH_ANI, 179 PerfConstants::EXIT_SEARCH_ANI, 180 PerfConstants::FORMSTACK_SLIDE_BACK, 181 PerfConstants::FORMSTACK_SLIDE_DOWN, 182 PerfConstants::FORMSTACK_SLIDE_UP, 183 PerfConstants::FORMSTACK_SWITCH_CARD, 184 PerfConstants::FORM_MANAGER_CREATE_FORM, 185 PerfConstants::INTO_LV_ANIM, 186 PerfConstants::EXIT_LV_ANIM, 187 PerfConstants::LV_INTO_APP_ANIM, 188 PerfConstants::CAMERA_UE_GO_GALLERY, 189 PerfConstants::EDITMODE_ENTER, 190 PerfConstants::EDITMODE_EXIT, 191 PerfConstants::LAUNCHER_OVER_SCROLL, 192 PerfConstants::DRAG_ITEM_ANI, 193 PerfConstants::WEB_LIST_FLING, 194 PerfConstants::START_APP_ANI_MENU, 195 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_APPCENTER, 196 PerfConstants::PC_CLICK_ARROW_RESTORE_DESKTOP, 197 PerfConstants::PC_CLICK_ARROW_SHOW_DESKTOP, 198 PerfConstants::PC_DOCK_EXIT_APP_CENTER, 199 PerfConstants::PC_DOCK_INTO_APP_CENTER, 200 PerfConstants::PC_INTO_APP_CENTER_ON_RECENT, 201 PerfConstants::PC_INTO_RECENT, 202 PerfConstants::PC_SPLIT_SCROLL_RECENT, 203 PerfConstants::PC_SPLIT_START_ANIMATE, 204 PerfConstants::SMARTDOCK_RECENTANIM_FIRSTOPEN, 205 PerfConstants::PC_SHORTCUT_GLOBAL_SEARCH, 206 PerfConstants::SWITCH_DESKTOP, 207 PerfConstants::LAUNCHER_APP_LAUNCH_FROM_WATCHFUNCKEY, 208 PerfConstants::WATCH_SCROLL_CARD_LIST_ANI, 209 PerfConstants::WATCH_WATCHFACE_LONGPRESS_TO_LIST, 210 PerfConstants::WATCH_WATCHFACELIST_CLICK_TO_EDIT, 211 PerfConstants::WATCH_WATCHFACESELECT_TO_WATCHFACE, 212 PerfConstants::WATCH_WATCHFACE_STYLE_SWIPE, 213 PerfConstants::WATCH_POWER_DOUBLE_CLICK_TO_RECENTS, 214 PerfConstants::APP_ASSOCIATED_START, 215 PerfConstants::CONTACTS_DIALER_BUTTON_PRESS, 216 PerfConstants::LAUNCHER_CARD_TEMP_SHOW, 217 PerfConstants::GESTURE_TO_RECENTS, 218 PerfConstants::START_APP_ANI_AG, 219 PerfConstants::CORE_METHOD_DESKTOP_SHOW, 220 PerfConstants::APP_START, 221 PerfConstants::PC_SPLIT_DRAG_DIVIDER_ANIMATE, 222 PerfConstants::PC_STARTUP_TIME, 223 PerfConstants::PC_WAKEUP_LATENCY, 224 PerfConstants::APP_EXIT_FROM_RECENT, 225 PerfConstants::APP_EXIT_FROM_RECENT, 226 PerfConstants::COLLABORATION_ANIMATION, 227 PerfConstants::CUSTOM_ANIMATOR_ROTATE90ACW, 228 PerfConstants::EXIT_APP_CENTER, 229 PerfConstants::PC_RESTORE_DESKTOP_GESTURE_OPERATION, 230 PerfConstants::PC_SHOW_DESKTOP_GESTURE, 231 PerfConstants::PC_TO_RECENT_GESTURE, 232 PerfConstants::PC_ONE_FIN_SHOW_DESKTOP_GESTURE, 233 PerfConstants::PC_ONE_FINGER_TO_RECENT_GESTURE, 234 PerfConstants::WINDOW_DO_RESET_SCALE_ANIMATION, 235 PerfConstants::WINDOW_DO_SCALE_ANIMATION 236 }; 237 }; 238 239 } 240 } 241 242 #endif // ANIMATOR_MONITOR_H