1 /* 2 * Copyright (c) 2022 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 DFX_HISYSEVENT_H 17 #define DFX_HISYSEVENT_H 18 19 #include "hisysevent.h" 20 21 #ifdef OHOS_BUILD_ENABLE_DFX_RADAR 22 #include "api_duration_statistics.h" 23 #endif // OHOS_BUILD_ENABLE_DFX_RADAR 24 25 #include "input_device_manager.h" 26 #include "key_event.h" 27 #include "pointer_event.h" 28 29 namespace OHOS { 30 namespace MMI { 31 class DfxHisysevent { 32 public: 33 struct DispCastTime { 34 uint32_t sampleCount; 35 uint32_t totalTimes; 36 uint32_t below10msTimes; 37 uint32_t below25msTimes; 38 uint32_t below50msTimes; 39 uint32_t above50msTimes; 40 }; 41 struct ComboStartCastTime { 42 uint32_t totalTimes; 43 uint32_t below10msTimes; 44 uint32_t below30msTimes; 45 uint32_t below50msTimes; 46 uint32_t above50msTimes; 47 }; 48 struct ClientConnectData { 49 int32_t pid { -1 }; 50 int32_t uid { -1 }; 51 int32_t moduleType { -1 }; 52 std::string programName; 53 int32_t serverFd { -1 }; 54 }; 55 56 enum TOUCHPAD_SETTING_CODE { 57 TOUCHPAD_SCROLL_SETTING = 1, 58 TOUCHPAD_SCROLL_DIR_SETTING, 59 TOUCHPAD_TAP_SETTING, 60 TOUCHPAD_SWIPE_SETTING, 61 TOUCHPAD_PINCH_SETTING, 62 TOUCHPAD_POINTER_SPEED_SETTING, 63 TOUCHPAD_RIGHT_CLICK_SETTING, 64 TOUCHPAD_ROTATE_SETTING, 65 TOUCHPAD_DOUBLE_TAP_DRAG_SETTING, 66 }; 67 68 enum KEY_ERROR_CODE { 69 ERROR_RETURN_VALUE = 65470470, 70 FAILED_TIMER = 65470471, 71 NO_INPUT_DEVICE = 65470472, 72 INVALID_PARAMETER = 65470473, 73 FAILED_VERIFICATION = 65470474, 74 FAILED_PARSE_CONFIG = 65470475, 75 DISPLAY_NOT_FOUND = 65470476, 76 WINDOW_NOT_FOUND = 65470477, 77 SESSION_NOT_FOUND = 65470478, 78 }; 79 80 enum KEY_CONSUMPTION_TYPE { 81 DISPATCH_KEY = 0, 82 KEY_FILTER, 83 KEY_INTERCEPT, 84 KEY_SUBCRIBER, 85 FINGERPRINT, 86 STYLUS_PEN, 87 AIBASE_VOICE, 88 SCREEN_SHOT, 89 SCREEN_RECORDING, 90 OPEN_WALLET, 91 OPEN_SOS, 92 KEY_EVENT_CANCEL, 93 KEY_SCREEN_ON, 94 }; 95 96 static void OnClientConnect(const ClientConnectData &data, OHOS::HiviewDFX::HiSysEvent::EventType type); 97 static void OnClientDisconnect(const SessionPtr& secPtr, int32_t fd, 98 OHOS::HiviewDFX::HiSysEvent::EventType type); 99 static void OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer, int32_t fd, 100 OHOS::HiviewDFX::HiSysEvent::EventType type); 101 static void OnUpdateTargetKey(std::shared_ptr<KeyEvent> key, int32_t fd, 102 OHOS::HiviewDFX::HiSysEvent::EventType type); 103 static void OnFocusWindowChanged(int32_t oldFocusWindowId, int32_t newFocusWindowId, 104 int32_t oldFocusWindowPid, int32_t newFocusWindowPid); 105 static void OnZorderWindowChanged(int32_t oldZorderFirstWindowId, int32_t newZorderFirstWindowId, 106 int32_t oldZorderFirstWindowPid, int32_t newZorderFirstWindowPid); 107 static void OnLidSwitchChanged(int32_t lidSwitch); 108 static void ApplicationBlockInput(const SessionPtr& sess); 109 static void CalcKeyDispTimes(); 110 static void CalcPointerDispTimes(); 111 static void CalcComboStartTimes(int32_t keyDownDuration); 112 static void ReportDispTimes(); 113 static void ReportComboStartTimes(); 114 static void ReportPowerInfo(std::shared_ptr<KeyEvent> key, OHOS::HiviewDFX::HiSysEvent::EventType type); GetComboStartTime()115 static inline void GetComboStartTime() 116 { 117 comboStartTime_ = GetSysClockTime(); 118 } GetDispStartTime()119 static inline void GetDispStartTime() 120 { 121 dispatchStartTime_ = GetSysClockTime(); 122 } 123 static void ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, bool flag); 124 static void ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, int32_t value); 125 static void StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent); 126 static void ReportKnuckleClickEvent(); 127 static void ReportScreenCaptureGesture(); 128 static void ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime, int32_t distanceInterval); 129 static void ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent, int32_t intervalTime); 130 static void ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent, float distance); 131 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR 132 static void ReportMagicCursorColorChange(std::string fill_Color, std::string stroke_Color); 133 static void ReportMagicCursorShapeChange(std::string fill_Code, OHOS::MMI::MOUSE_ICON mouse_Style); 134 static void ReportMagicCursorSizeChange(std::string fill_Code, std::string mouse_Size); 135 static void ReportMagicCursorFault(std::string error_Code, std::string error_Name); 136 #endif // OHOS_BUILD_ENABLE_MAGICCURSOR 137 static void ReportSmartShotSuccTimes(); 138 static void ReportKnuckleGestureTrackLength(int32_t knuckleGestureTrackLength); 139 static void ReportKnuckleGestureTrackTime(const std::vector<int64_t> &gestureTimeStamps); 140 static void ReportKnuckleGestureFaildTimes(); 141 static void ReportKnuckleDrawSSuccessTimes(); 142 static void ReportKnuckleGestureFromFailToSuccessTime(int32_t intervalTime); 143 static void ReportKnuckleGestureFromSuccessToFailTime(int32_t intervalTime); 144 static void ReportScreenRecorderGesture(int32_t intervalTime); 145 static void ReportFailIfKnockTooFast(); 146 static void ReportFailIfOneSuccTwoFail(const std::shared_ptr<PointerEvent> touchEvent); 147 static std::string GetTpVendorName(); 148 static std::string GetAccVendorName(); 149 static std::string GetLcdInfo(); 150 static void ReportSubscribeKeyEvent(int32_t subscribeId, int32_t finalKey, std::string name, int32_t pid); 151 static void ReportUnSubscribeKeyEvent(int32_t subscribeId, int32_t finalKey, std::string name, int32_t pid); 152 static void ReportKeyboardEvent(int32_t eventType, int32_t keyCode, int32_t keyAction); 153 static void ReportLaunchAbility(std::string bundleName); 154 static void ReportCommonAction(std::string action); 155 static void ReportTouchEvent(int32_t pointAction, int32_t pointId, int32_t windowId); 156 static void ReportSetCustomCursor(int32_t windowPid, int32_t windowId); 157 static void ReportSetMouseIcon(int32_t windowId); 158 static void ReportSetPointerStyle(int32_t windowId, int32_t pointerStyleId, bool isUiExtension); 159 static void ReportSetPointerVisible(bool visible, int32_t priority); 160 static void ReportSetPointerSpeed(int32_t speed); 161 static void ReportAddInputHandler(int32_t handlerType); 162 static void ReportRemoveInputHandler(int32_t handlerType); 163 static void ReportInjectPointerEvent(bool isNativeInject); 164 static void ReportEnableCombineKey(bool enable); 165 static void ReportAppendExtraData(); 166 static void ReportTransmitInfrared(int64_t number); 167 static void ReportSetCurrentUser(int32_t userId); 168 #ifdef OHOS_BUILD_ENABLE_DFX_RADAR 169 static void ReportApiCallTimes(ApiDurationStatistics::Api api, int32_t durationMS); 170 static void ReportMMiServiceThreadLongTask(const std::string &taskName); 171 #endif // OHOS_BUILD_ENABLE_DFX_RADAR 172 static void ReportKeyEvent(std::string name); 173 static void ReportKeyEventTimes(KEY_CONSUMPTION_TYPE type); 174 static void ClearKeyEventCount(); 175 static void ReportFailLaunchAbility(std::string bundleName, int32_t errorCode); 176 static void ReportFailSubscribeKey(std::string functionName, std::string subscribeName, 177 int32_t keyCode, int32_t errorCode); 178 static void ReportFailHandleKey(std::string name, int32_t keyCode, int32_t errorCode); 179 180 private: 181 static inline int64_t dispatchStartTime_ { 0 }; 182 static inline int64_t comboStartTime_ { 0 }; 183 static inline DispCastTime dispCastTime_ { 0 }; 184 static inline ComboStartCastTime comboStartCastTime_ { 0 }; 185 #ifdef OHOS_BUILD_ENABLE_DFX_RADAR 186 static inline ApiDurationStatistics apiDurationStatics_; 187 #endif // OHOS_BUILD_ENABLE_DFX_RADAR 188 static inline int32_t keyEventCount_ { 0 }; 189 static inline std::map<KEY_CONSUMPTION_TYPE, int32_t> calKeyEventTime_; 190 }; 191 } // namespace MMI 192 } // namespace OHOS 193 #endif // BYTRACE_ADAPTER_H 194