• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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