• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2024 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 #include "dfx_hisysevent.h"
17 
18 #include <fstream>
19 
20 #include "bundle_name_parser.h"
21 #include "i_input_windows_manager.h"
22 #include "parameters.h"
23 
24 #undef MMI_LOG_DOMAIN
25 #define MMI_LOG_DOMAIN MMI_LOG_SERVER
26 #undef MMI_LOG_TAG
27 #define MMI_LOG_TAG "DfxHisysevent"
28 
29 namespace OHOS {
30 namespace MMI {
31 namespace {
32 constexpr uint32_t REPORT_DISPATCH_TIMES { 100 };
33 constexpr uint32_t REPORT_COMBO_START_TIMES { 100 };
34 constexpr uint32_t POINTER_CLEAR_TIMES { 10 };
35 constexpr int32_t CONVERSION_US_TO_MS { 1000 };
36 constexpr int32_t TIMES_LEVEL1 { 10 };
37 constexpr int32_t TIMES_LEVEL2 { 25 };
38 constexpr int32_t TIMES_LEVEL3 { 30 };
39 constexpr int32_t TIMES_LEVEL4 { 50 };
40 constexpr int32_t FINGERSENSE_EVENT_TIMES { 1 };
41 constexpr size_t SINGLE_KNUCKLE_SIZE { 1 };
42 constexpr size_t DOUBLE_KNUCKLE_SIZE { 2 };
43 constexpr int32_t FAIL_SUCC_TIME_DIFF { 3 * 60 * 1000 };
44 constexpr int32_t MIN_GESTURE_TIMESTAMPS_SIZE { 2 };
45 constexpr int32_t DOWN_TO_PREV_UP_MAX_TIME_THRESHOLD { 1000 * 1000 };
46 constexpr int32_t FOLDABLE_DEVICE { 2 };
47 constexpr int32_t REPORT_MAX_KEY_EVENT_TIMES { 1000 };
48 const int32_t ROTATE_POLICY = system::GetIntParameter("const.window.device.rotate_policy", 0);
49 const std::string EMPTY_STRING { "" };
50 const char* LCD_PATH { "/sys/class/graphics/fb0/lcd_model" };
51 const char* ACC_PATH { "/sys/devices/platform/_sensor/acc_info" };
52 const char* ACC0_PATH { "/sys/class/sensors/acc_sensor/info" };
53 const char* TP_PATH { "/sys/touchscreen/touch_chip_info" };
54 const char* TP0_PATH { "/sys/touchscreen0/touch_chip_info" };
55 const char* TP1_PATH { "/sys/touchscreen1/touch_chip_info" };
56 const std::string NAME_DISPATCH { "dispatch" };
57 const std::string NAME_FILTER { "filter" };
58 const std::string NAME_INTERCEPT { "intercept" };
59 const std::string NAME_SUBCRIBER { "subcriber" };
60 const std::string NAME_FINGERPRINT { "fingerprint" };
61 const std::string NAME_STYLUS { "stylus" };
62 const std::string NAME_CANCEL { "cancel" };
63 const std::string TOUCH_SCREEN_ON { "screen on" };
64 static constexpr char WATCH_CROWN_MUTE[] { "WATCH_CROWN_MUTE" };
65 } // namespace
66 
GetVendorInfo(const char * nodePath)67 static std::string GetVendorInfo(const char* nodePath)
68 {
69     char realPath[PATH_MAX] = {};
70     if (realpath(nodePath, realPath) == nullptr) {
71         MMI_HILOGE("The realpath return nullptr");
72         return "";
73     }
74     std::ifstream file(realPath);
75     if (!file.is_open()) {
76         MMI_HILOGE("Unable to open file:%{private}s, error:%{public}d", nodePath, errno);
77         return "";
78     }
79     std::string vendorInfo;
80     file >> vendorInfo;
81     file.close();
82     return vendorInfo;
83 }
84 
OnClientConnect(const ClientConnectData & data,OHOS::HiviewDFX::HiSysEvent::EventType type)85 void DfxHisysevent::OnClientConnect(const ClientConnectData &data, OHOS::HiviewDFX::HiSysEvent::EventType type)
86 {
87     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
88         int32_t ret = HiSysEventWrite(
89             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
90             "CLIENT_CONNECTION_SUCCESS",
91             type,
92             "PID", data.pid,
93             "UID", data.uid,
94             "MODULE_TYPE", data.moduleType,
95             "SERVER_FD", data.serverFd,
96             "PROGRAMNAME", data.programName,
97             "MSG", "The client successfully connected to the server");
98         if (ret != 0) {
99             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
100         }
101     } else {
102         int32_t ret = HiSysEventWrite(
103             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
104             "CLIENT_CONNECTION_FAILURE",
105             type,
106             "PID", data.pid,
107             "UID", data.uid,
108             "MODULE_TYPE", data.moduleType,
109             "PROGRAMNAME", data.programName,
110             "MSG", "The client failed to connect to the server");
111         if (ret != 0) {
112             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
113         }
114     }
115 }
116 
OnClientDisconnect(const SessionPtr & secPtr,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)117 void DfxHisysevent::OnClientDisconnect(const SessionPtr& secPtr, int32_t fd,
118     OHOS::HiviewDFX::HiSysEvent::EventType type)
119 {
120     CHKPV(secPtr);
121     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
122         int32_t ret = HiSysEventWrite(
123             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
124             "CLIENT_DISCONNECTION_SUCCESS",
125             type,
126             "PID", secPtr->GetPid(),
127             "UID", secPtr->GetUid(),
128             "MODULE_TYPE", secPtr->GetModuleType(),
129             "FD", fd,
130             "PROGRAMNAME", secPtr->GetProgramName(),
131             "MSG", "The client successfully disconnected to the server");
132         if (ret != 0) {
133             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
134         }
135     } else {
136         if (secPtr == nullptr) {
137             int32_t ret = HiSysEventWrite(
138                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
139                 "CLIENT_DISCONNECTION_FAILURE",
140                 type,
141                 "MSG", "The client failed to disconnect to the server because secPtr is nullptr");
142             if (ret != 0) {
143                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
144             }
145         } else {
146             int32_t ret = HiSysEventWrite(
147                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
148                 "CLIENT_DISCONNECTION_FAILURE",
149                 type,
150                 "MSG", "The client failed to disconnect to the server because close(fd) return error");
151             if (ret != 0) {
152                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
153             }
154         }
155     }
156 }
157 
OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)158 void DfxHisysevent::OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer, int32_t fd,
159     OHOS::HiviewDFX::HiSysEvent::EventType type)
160 {
161     CHKPV(pointer);
162     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
163         int32_t ret = HiSysEventWrite(
164             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
165             "TARGET_POINTER_EVENT_SUCCESS",
166             type,
167             "EVENTTYPE", pointer->GetEventType(),
168             "AGENT_WINDOWID", pointer->GetAgentWindowId(),
169             "TARGET_WINDOWID", pointer->GetTargetWindowId(),
170             "PID", WIN_MGR->GetWindowPid(pointer->GetTargetWindowId()),
171             "FD", fd,
172             "MSG", "The window manager successfully update target pointer");
173         if (ret != 0) {
174             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
175         }
176     } else {
177         int32_t ret = HiSysEventWrite(
178             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
179             "TARGET_POINTER_EVENT_FAILURE",
180             OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
181             "EVENTTYPE", pointer->GetEventType(),
182             "MSG", "The window manager failed to update target pointer");
183         if (ret != 0) {
184             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
185         }
186     }
187 }
188 
OnUpdateTargetKey(std::shared_ptr<KeyEvent> key,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)189 void DfxHisysevent::OnUpdateTargetKey(std::shared_ptr<KeyEvent> key, int32_t fd,
190     OHOS::HiviewDFX::HiSysEvent::EventType type)
191 {
192     CHKPV(key);
193     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
194         int32_t ret = HiSysEventWrite(
195             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
196             "TARGET_KEY_EVENT_SUCCESS",
197             type,
198             "EVENTTYPE", key->GetEventType(),
199             "KEYCODE", key->GetKeyCode(),
200             "ACTION", key->GetAction(),
201             "ACTION_TIME", key->GetActionTime(),
202             "ACTION_STARTTIME", key->GetActionStartTime(),
203             "FLAG", key->GetFlag(),
204             "KEYACTION", key->GetKeyAction(),
205             "FD", fd,
206             "AGENT_WINDOWID", key->GetAgentWindowId(),
207             "TARGET_WINDOWID", key->GetTargetWindowId(),
208             "PID", WIN_MGR->GetWindowPid(key->GetTargetWindowId()),
209             "MSG", "The window manager successfully update target key");
210         if (ret != 0) {
211             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
212         }
213     } else {
214         int32_t ret = HiSysEventWrite(
215             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
216             "TARGET_KEY_EVENT_FAILURE",
217             type,
218             "EVENTTYPE", key->GetEventType(),
219             "KEYCODE", key->GetKeyCode(),
220             "ACTION", key->GetAction(),
221             "ACTION_TIME", key->GetActionTime(),
222             "ACTION_STARTTIME", key->GetActionStartTime(),
223             "FLAG", key->GetFlag(),
224             "KEYACTION", key->GetKeyAction(),
225             "MSG", "The window manager failed to update target key");
226         if (ret != 0) {
227             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
228         }
229     }
230 }
231 
OnFocusWindowChanged(int32_t oldFocusWindowId,int32_t newFocusWindowId,int32_t oldFocusWindowPid,int32_t newFocusWindowPid)232 void DfxHisysevent::OnFocusWindowChanged(int32_t oldFocusWindowId, int32_t newFocusWindowId,
233     int32_t oldFocusWindowPid, int32_t newFocusWindowPid)
234 {
235     int32_t ret = HiSysEventWrite(
236         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
237         "FOCUS_WINDOW_CHANGE",
238         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
239         "OLD_FOCUS_WINDOWID", oldFocusWindowId,
240         "NEW_FOCUS_WINDOWID", newFocusWindowId,
241         "OLD_FOCUS_WINDOWPID", oldFocusWindowPid,
242         "NEW_FOCUS_WINDOWPID", newFocusWindowPid,
243         "MSG", "The focusWindowId changing succeeded");
244     if (ret != 0) {
245         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
246     }
247 }
248 
OnZorderWindowChanged(int32_t oldZorderFirstWindowId,int32_t newZorderFirstWindowId,int32_t oldZorderFirstWindowPid,int32_t newZorderFirstWindowPid)249 void DfxHisysevent::OnZorderWindowChanged(int32_t oldZorderFirstWindowId, int32_t newZorderFirstWindowId,
250     int32_t oldZorderFirstWindowPid, int32_t newZorderFirstWindowPid)
251 {
252     int32_t ret = HiSysEventWrite(
253         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
254         "Z_ORDER_WINDOW_CHANGE",
255         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
256         "OLD_ZORDER_FIRST_WINDOWID", oldZorderFirstWindowId,
257         "NEW_ZORDER_FIRST_WINDOWID", newZorderFirstWindowId,
258         "OLD_ZORDER_FIRST_WINDOWPID", oldZorderFirstWindowPid,
259         "NEW_ZORDER_FIRST_WINDOWPID", newZorderFirstWindowPid,
260         "MSG", "The ZorderFirstWindow changing succeeded");
261     if (ret != 0) {
262         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
263     }
264 }
265 
OnLidSwitchChanged(int32_t lidSwitch)266 void DfxHisysevent::OnLidSwitchChanged(int32_t lidSwitch)
267 {
268     int32_t ret = HiSysEventWrite(
269         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
270         "LID_SWITCH",
271         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
272         "SWITCH", lidSwitch);
273     if (ret != 0) {
274         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
275     }
276 }
277 
ApplicationBlockInput(const SessionPtr & sess)278 void DfxHisysevent::ApplicationBlockInput(const SessionPtr& sess)
279 {
280     int32_t ret = HiSysEventWrite(
281         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
282         "APPLICATION_BLOCK_INPUT",
283         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
284         "PID", sess->GetPid(),
285         "UID", sess->GetUid(),
286         "PACKAGE_NAME", sess->GetProgramName(),
287         "PROCESS_NAME", sess->GetProgramName(),
288         "MSG", "User input does not respond");
289     if (ret != 0) {
290         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
291     }
292 }
293 
CalcKeyDispTimes()294 void DfxHisysevent::CalcKeyDispTimes()
295 {
296     int64_t endTime = GetSysClockTime();
297     dispCastTime_.totalTimes++;
298     int64_t castTime = (endTime - dispatchStartTime_) / CONVERSION_US_TO_MS;
299     if (castTime <= TIMES_LEVEL1) {
300         dispCastTime_.below10msTimes++;
301     } else if (castTime <= TIMES_LEVEL2) {
302         dispCastTime_.below25msTimes++;
303     } else if (castTime <= TIMES_LEVEL4) {
304         dispCastTime_.below50msTimes++;
305     } else {
306         dispCastTime_.above50msTimes++;
307     }
308 }
309 
CalcPointerDispTimes()310 void DfxHisysevent::CalcPointerDispTimes()
311 {
312     int64_t endTime = GetSysClockTime();
313     dispCastTime_.sampleCount++;
314     int64_t castTime = (endTime - dispatchStartTime_) / CONVERSION_US_TO_MS;
315     if (dispCastTime_.sampleCount == POINTER_CLEAR_TIMES) {
316         dispCastTime_.sampleCount = 0;
317         dispCastTime_.totalTimes++;
318         if (castTime <= TIMES_LEVEL1) {
319             dispCastTime_.below10msTimes++;
320         } else if (castTime <= TIMES_LEVEL2) {
321             dispCastTime_.below25msTimes++;
322         } else if (castTime <= TIMES_LEVEL4) {
323             dispCastTime_.below50msTimes++;
324         } else {
325             dispCastTime_.above50msTimes++;
326         }
327     }
328 }
329 
ReportDispTimes()330 void DfxHisysevent::ReportDispTimes()
331 {
332     if (dispCastTime_.totalTimes >= REPORT_DISPATCH_TIMES) {
333         int32_t ret = HiSysEventWrite(
334             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
335             "INPUT_DISPATCH_TIME",
336             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
337             "BELOW10MS", dispCastTime_.below10msTimes,
338             "BELOW25MS", dispCastTime_.below25msTimes,
339             "BELOW50MS", dispCastTime_.below50msTimes,
340             "ABOVE50MS", dispCastTime_.above50msTimes,
341             "MSG", "The costing time to dispatch event");
342         if (ret != 0) {
343             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
344         } else {
345             dispCastTime_.sampleCount = 0;
346             dispCastTime_.totalTimes = 0;
347             dispCastTime_.below10msTimes = 0;
348             dispCastTime_.below25msTimes = 0;
349             dispCastTime_.below50msTimes = 0;
350             dispCastTime_.above50msTimes = 0;
351         }
352     }
353 }
354 
CalcComboStartTimes(const int32_t keyDownDuration)355 void DfxHisysevent::CalcComboStartTimes(const int32_t keyDownDuration)
356 {
357     int64_t endTime = GetSysClockTime();
358     comboStartCastTime_.totalTimes++;
359     int64_t castTime = (endTime - comboStartTime_) / CONVERSION_US_TO_MS - keyDownDuration;
360     if (castTime <= TIMES_LEVEL1) {
361         comboStartCastTime_.below10msTimes++;
362     } else if (castTime <= TIMES_LEVEL3) {
363         comboStartCastTime_.below30msTimes++;
364     } else if (castTime <= TIMES_LEVEL4) {
365         comboStartCastTime_.below50msTimes++;
366     } else {
367         comboStartCastTime_.above50msTimes++;
368     }
369 }
370 
ReportComboStartTimes()371 void DfxHisysevent::ReportComboStartTimes()
372 {
373     if (comboStartCastTime_.totalTimes >= REPORT_COMBO_START_TIMES) {
374         int32_t ret = HiSysEventWrite(
375             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
376             "COMBO_START_TIME",
377             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
378             "BELOW10MS", comboStartCastTime_.below10msTimes,
379             "BELOW30MS", comboStartCastTime_.below30msTimes,
380             "BELOW50MS", comboStartCastTime_.below50msTimes,
381             "ABOVE50MS", comboStartCastTime_.above50msTimes,
382             "MSG", "The costing time to launch application of combination");
383         if (ret != 0) {
384             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
385         } else {
386             comboStartCastTime_.totalTimes = 0;
387             comboStartCastTime_.below10msTimes = 0;
388             comboStartCastTime_.below30msTimes = 0;
389             comboStartCastTime_.below50msTimes = 0;
390             comboStartCastTime_.above50msTimes = 0;
391         }
392     }
393 }
394 
ReportPowerInfo(std::shared_ptr<KeyEvent> key,OHOS::HiviewDFX::HiSysEvent::EventType type)395 void DfxHisysevent::ReportPowerInfo(std::shared_ptr<KeyEvent> key, OHOS::HiviewDFX::HiSysEvent::EventType type)
396 {
397     CHKPV(key);
398     if (key->GetKeyAction() == KeyEvent::KEY_ACTION_UP) {
399         int32_t ret = HiSysEventWrite(
400             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
401             "INPUT_POWER_UP",
402             type);
403         if (ret != RET_OK) {
404             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
405         }
406     } else if (key->GetKeyAction() == KeyEvent::KEY_ACTION_DOWN) {
407         int32_t ret = HiSysEventWrite(
408             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
409             "INPUT_POWER_DOWN",
410             type);
411         if (ret != RET_OK) {
412             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
413         }
414     } else {
415         MMI_HILOGW("Press power key is error");
416     }
417 }
418 
StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)419 void DfxHisysevent::StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)
420 {
421     CHKPV(pointerEvent);
422     int32_t pointerAction = pointerEvent->GetPointerAction();
423     int32_t fingerCount = pointerEvent->GetFingerCount();
424 
425     if (pointerAction == PointerEvent::POINTER_ACTION_AXIS_BEGIN) {
426         int32_t ret = HiSysEventWrite(
427             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
428             "TOUCHPAD_PINCH",
429             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
430             "FINGER_COUNT", fingerCount);
431         if (ret != RET_OK) {
432             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
433         }
434     } else if (pointerAction == PointerEvent::POINTER_ACTION_SWIPE_BEGIN) {
435         int32_t ret = HiSysEventWrite(
436             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
437             "TOUCHPAD_SWIPE",
438             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
439             "FINGER_COUNT", fingerCount);
440         if (ret != RET_OK) {
441             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
442         }
443     } else {
444         MMI_HILOGW("HiviewDFX Statistic touchpad gesture is error, pointer action is invalid");
445     }
446 }
447 
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,bool flag)448 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, bool flag)
449 {
450     const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
451         { TOUCHPAD_SCROLL_SETTING, "TOUCHPAD_SCROLL_SETTING" },
452         { TOUCHPAD_SCROLL_DIR_SETTING, "TOUCHPAD_SCROLL_DIR_SETTING" },
453         { TOUCHPAD_TAP_SETTING, "TOUCHPAD_TAP_SETTING" },
454         { TOUCHPAD_SWIPE_SETTING, "TOUCHPAD_SWIPE_SETTING" },
455         { TOUCHPAD_PINCH_SETTING, "TOUCHPAD_PINCH_SETTING" },
456         { TOUCHPAD_DOUBLE_TAP_DRAG_SETTING, "TOUCHPAD_DOUBLE_TAP_DRAG_SETTING" },
457     };
458 
459     auto it = mapSettingCodeToSettingType.find(settingCode);
460     if (it == mapSettingCodeToSettingType.end()) {
461         MMI_HILOGE("HiviewDFX Report touchpad setting state is error, setting code is invalid");
462         return;
463     }
464     std::string name = it->second;
465 
466     int32_t ret = HiSysEventWrite(
467         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
468         name,
469         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
470         "SWITCH_STATE", flag);
471     if (ret != RET_OK) {
472         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
473     }
474     MMI_HILOGI("HiviewDFX Report touchpad setting code is:%{public}s, setting state is:%{public}s",
475         (it->second).c_str(), flag ? "true" : "false");
476 }
477 
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,int32_t value)478 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, int32_t value)
479 {
480     const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
481         { TOUCHPAD_POINTER_SPEED_SETTING, "TOUCHPAD_POINTER_SPEED_SETTING" },
482         { TOUCHPAD_RIGHT_CLICK_SETTING, "TOUCHPAD_RIGHT_CLICK_SETTING" },
483     };
484 
485     auto it = mapSettingCodeToSettingType.find(settingCode);
486     if (it == mapSettingCodeToSettingType.end()) {
487         MMI_HILOGW("HiviewDFX Report touchpad setting state is error, setting code is invalid");
488         return;
489     }
490     std::string name = it->second;
491 
492     int32_t ret = HiSysEventWrite(
493         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
494         name,
495         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
496         "SWITCH_VALUE", value);
497     if (ret != RET_OK) {
498         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
499     }
500     MMI_HILOGI("HiviewDFX Report touchpad setting code is:%{public}s, setting state is:%{public}d",
501         (it->second).c_str(), value);
502 }
503 
ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime,int32_t distanceInterval)504 void DfxHisysevent::ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime, int32_t distanceInterval)
505 {
506     int32_t ret = HiSysEventWrite(
507         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
508         "FINGERSENSE_KNOCK_EVENT_INFO",
509         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
510         "SK_S_T", FINGERSENSE_EVENT_TIMES,
511         "SKS_T_I", intervalTime / CONVERSION_US_TO_MS,
512         "DKS_D_I", distanceInterval,
513         "TP_INFO", GetTpVendorName(),
514         "S_INFO", GetAccVendorName(),
515         "LCD_INFO", GetLcdInfo());
516     if (ret != RET_OK) {
517         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
518     }
519 }
520 
ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent,int32_t intervalTime)521 void DfxHisysevent::ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent, int32_t intervalTime)
522 {
523     if (intervalTime >= DOWN_TO_PREV_UP_MAX_TIME_THRESHOLD) {
524         return;
525     }
526     CHKPV(touchEvent);
527     size_t size = touchEvent->GetPointerIds().size();
528     std::string knuckleFailCount;
529     std::string invalidTimeFailCount;
530     if (size == SINGLE_KNUCKLE_SIZE) {
531         knuckleFailCount = "SKF_T_I";
532         invalidTimeFailCount = "SK_F_T";
533     } else if (size == DOUBLE_KNUCKLE_SIZE) {
534         knuckleFailCount = "DKF_T_I";
535         invalidTimeFailCount = "DK_F_T";
536     } else {
537         MMI_HILOGE("HiviewDFX Report knuckle state error, knuckle size:%{public}zu", size);
538         return;
539     }
540     int32_t ret = HiSysEventWrite(
541         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
542         "FINGERSENSE_KNOCK_EVENT_INFO",
543         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
544         "FSF_T_C", FINGERSENSE_EVENT_TIMES,
545         knuckleFailCount, intervalTime / CONVERSION_US_TO_MS,
546         invalidTimeFailCount, FINGERSENSE_EVENT_TIMES,
547         "TP_INFO", GetTpVendorName(),
548         "S_INFO", GetAccVendorName(),
549         "LCD_INFO", GetLcdInfo());
550     if (ret != RET_OK) {
551         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
552     }
553 }
554 
ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent,float distance)555 void DfxHisysevent::ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent, float distance)
556 {
557     CHKPV(touchEvent);
558     int32_t ret = HiSysEventWrite(
559         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
560         "FINGERSENSE_KNOCK_EVENT_INFO",
561         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
562         "SK_F_T", FINGERSENSE_EVENT_TIMES,
563         "DKF_D_I", distance,
564         "FSF_D_C", FINGERSENSE_EVENT_TIMES,
565         "TP_INFO", GetTpVendorName(),
566         "S_INFO", GetAccVendorName(),
567         "LCD_INFO", GetLcdInfo());
568     if (ret != RET_OK) {
569         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
570     }
571 }
572 
ReportKnuckleClickEvent()573 void DfxHisysevent::ReportKnuckleClickEvent()
574 {
575     int32_t ret = HiSysEventWrite(
576         OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
577         "KNUCKLE_CLICK",
578         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
579         "PNAMEID", EMPTY_STRING,
580         "PVERSIONID", EMPTY_STRING);
581     if (ret != RET_OK) {
582         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
583     }
584 }
585 
ReportScreenCaptureGesture()586 void DfxHisysevent::ReportScreenCaptureGesture()
587 {
588     int32_t ret = HiSysEventWrite(
589         OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
590         "SINGLE_KNUCKLE_DOUBLE_CLICK",
591         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
592         "PNAMEID", EMPTY_STRING,
593         "PVERSIONID", EMPTY_STRING);
594     if (ret != RET_OK) {
595         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
596     }
597 }
598 
599 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
ReportMagicCursorColorChange(std::string fill_Color,std::string stroke_Color)600 void DfxHisysevent::ReportMagicCursorColorChange(std::string fill_Color, std::string stroke_Color)
601 {
602     int32_t ret = HiSysEventWrite(
603         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
604         "MAGIC_CURSOR_COLOR",
605         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
606         "FILL_COLOR", fill_Color,
607         "STROKE_COLOR", stroke_Color);
608     if (ret != RET_OK) {
609         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
610     }
611 }
612 
ReportMagicCursorShapeChange(std::string fill_Code,OHOS::MMI::MOUSE_ICON mouse_Style)613 void DfxHisysevent::ReportMagicCursorShapeChange(std::string fill_Code, OHOS::MMI::MOUSE_ICON mouse_Style)
614 {
615     int32_t ret = HiSysEventWrite(
616         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
617         "MAGIC_CURSOR_SHAPE",
618         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
619         "MOUSE_STYLE", mouse_Style,
620         "FILL_CODE", fill_Code);
621     if (ret != RET_OK) {
622         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
623     }
624 }
625 
ReportMagicCursorSizeChange(std::string fill_Code,std::string mouse_Size)626 void DfxHisysevent::ReportMagicCursorSizeChange(std::string fill_Code, std::string mouse_Size)
627 {
628     int32_t ret = HiSysEventWrite(
629         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
630         "MAGIC_CURSOR_SIZE",
631         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
632         "MOUSE_SIZE", mouse_Size,
633         "FILL_CODE", fill_Code);
634     if (ret != RET_OK) {
635         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
636     }
637 }
638 
ReportMagicCursorFault(std::string error_Code,std::string error_Name)639 void DfxHisysevent::ReportMagicCursorFault(std::string error_Code, std::string error_Name)
640 {
641     int32_t ret = HiSysEventWrite(
642         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
643         "FANTASY_CURSOR_FAILED",
644         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
645         "ERROR_CODE", error_Code,
646         "ERROR_NAME", error_Name);
647     if (ret != RET_OK) {
648         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
649     }
650 }
651 #endif // OHOS_BUILD_ENABLE_MAGICCURSOR
652 
ReportSmartShotSuccTimes()653 void DfxHisysevent::ReportSmartShotSuccTimes()
654 {
655     int32_t ret = HiSysEventWrite(
656         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
657         "FINGERSENSE_KNOCK_EVENT_INFO",
658         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
659         "RG_S_T", FINGERSENSE_EVENT_TIMES,
660         "TP_INFO", GetTpVendorName(),
661         "S_INFO", GetAccVendorName(),
662         "LCD_INFO", GetLcdInfo());
663     if (ret != RET_OK) {
664         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
665     }
666 }
667 
ReportKnuckleGestureTrackLength(int32_t knuckleGestureTrackLength)668 void DfxHisysevent::ReportKnuckleGestureTrackLength(int32_t knuckleGestureTrackLength)
669 {
670     int32_t ret = HiSysEventWrite(
671         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
672         "FINGERSENSE_KNOCK_EVENT_INFO",
673         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
674         "RG_TRACK_LENGTH", knuckleGestureTrackLength,
675         "TP_INFO", GetTpVendorName(),
676         "S_INFO", GetAccVendorName(),
677         "LCD_INFO", GetLcdInfo());
678     if (ret != RET_OK) {
679         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
680     }
681 }
682 
ReportKnuckleGestureTrackTime(const std::vector<int64_t> & gestureTimeStamps)683 void DfxHisysevent::ReportKnuckleGestureTrackTime(const std::vector<int64_t> &gestureTimeStamps)
684 {
685     size_t size = gestureTimeStamps.size();
686     if (size < MIN_GESTURE_TIMESTAMPS_SIZE) {
687         MMI_HILOGE("HiviewDFX Report knuckle gesture track time error, knuckle timestamps size:%{public}zu", size);
688         return;
689     }
690     int32_t knuckleGestureTrackTime = (gestureTimeStamps[size - 1] - gestureTimeStamps[0]) / CONVERSION_US_TO_MS;
691     int32_t ret = HiSysEventWrite(
692         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
693         "FINGERSENSE_KNOCK_EVENT_INFO",
694         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
695         "RG_TRACK_TIME", knuckleGestureTrackTime,
696         "TP_INFO", GetTpVendorName(),
697         "S_INFO", GetAccVendorName(),
698         "LCD_INFO", GetLcdInfo());
699     if (ret != RET_OK) {
700         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
701     }
702 }
703 
ReportScreenRecorderGesture(int32_t intervalTime)704 void DfxHisysevent::ReportScreenRecorderGesture(int32_t intervalTime)
705 {
706     int32_t ret = HiSysEventWrite(
707         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
708         "FINGERSENSE_KNOCK_EVENT_INFO",
709         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
710         "DK_S_T", FINGERSENSE_EVENT_TIMES,
711         "DKS_T_I", intervalTime / CONVERSION_US_TO_MS,
712         "TP_INFO", GetTpVendorName(),
713         "S_INFO", GetAccVendorName(),
714         "LCD_INFO", GetLcdInfo());
715     if (ret != RET_OK) {
716         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
717     }
718 }
719 
ReportKnuckleGestureFaildTimes()720 void DfxHisysevent::ReportKnuckleGestureFaildTimes()
721 {
722     int32_t ret = HiSysEventWrite(
723         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
724         "FINGERSENSE_KNOCK_EVENT_INFO",
725         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
726         "LG_F_T", FINGERSENSE_EVENT_TIMES,
727         "TP_INFO", GetTpVendorName(),
728         "S_INFO", GetAccVendorName(),
729         "LCD_INFO", GetLcdInfo());
730     if (ret != RET_OK) {
731         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
732     }
733 }
734 
ReportKnuckleDrawSSuccessTimes()735 void DfxHisysevent::ReportKnuckleDrawSSuccessTimes()
736 {
737     int32_t ret = HiSysEventWrite(
738         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
739         "FINGERSENSE_KNOCK_EVENT_INFO",
740         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
741         "L_S_S_T", FINGERSENSE_EVENT_TIMES,
742         "TP_INFO", GetTpVendorName(),
743         "S_INFO", GetAccVendorName(),
744         "LCD_INFO", GetLcdInfo());
745     if (ret != RET_OK) {
746         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
747     }
748 }
749 
ReportKnuckleGestureFromFailToSuccessTime(int32_t intervalTime)750 void DfxHisysevent::ReportKnuckleGestureFromFailToSuccessTime(int32_t intervalTime)
751 {
752     intervalTime /= CONVERSION_US_TO_MS;
753     if (intervalTime < 0 || intervalTime >= FAIL_SUCC_TIME_DIFF) {
754         return;
755     }
756     int32_t ret = HiSysEventWrite(
757         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
758         "FINGERSENSE_KNOCK_EVENT_INFO",
759         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
760         "RG_F_S_TIME_DIFF", intervalTime,
761         "TP_INFO", GetTpVendorName(),
762         "S_INFO", GetAccVendorName(),
763         "LCD_INFO", GetLcdInfo());
764     if (ret != RET_OK) {
765         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
766     }
767 }
768 
ReportKnuckleGestureFromSuccessToFailTime(int32_t intervalTime)769 void DfxHisysevent::ReportKnuckleGestureFromSuccessToFailTime(int32_t intervalTime)
770 {
771     intervalTime /= CONVERSION_US_TO_MS;
772     if (intervalTime < 0 || intervalTime >= FAIL_SUCC_TIME_DIFF) {
773         return;
774     }
775     int32_t ret = HiSysEventWrite(
776         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
777         "FINGERSENSE_KNOCK_EVENT_INFO",
778         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
779         "RG_S_F_TIME_DIFF", intervalTime,
780         "TP_INFO", GetTpVendorName(),
781         "S_INFO", GetAccVendorName(),
782         "LCD_INFO", GetLcdInfo());
783     if (ret != RET_OK) {
784         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
785     }
786 }
787 
ReportFailIfKnockTooFast()788 void DfxHisysevent::ReportFailIfKnockTooFast()
789 {
790     int32_t ret = HiSysEventWrite(
791         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
792         "FINGERSENSE_KNOCK_EVENT_INFO",
793         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
794         "SK_F_T", FINGERSENSE_EVENT_TIMES,
795         "FSF_C_C", FINGERSENSE_EVENT_TIMES,
796         "TP_INFO", GetTpVendorName(),
797         "S_INFO", GetAccVendorName(),
798         "LCD_INFO", GetLcdInfo());
799     if (ret != RET_OK) {
800         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
801     }
802 }
803 
ReportFailIfOneSuccTwoFail(const std::shared_ptr<PointerEvent> touchEvent)804 void DfxHisysevent::ReportFailIfOneSuccTwoFail(const std::shared_ptr<PointerEvent> touchEvent)
805 {
806     CHKPV(touchEvent);
807     int32_t id = touchEvent->GetPointerId();
808     PointerEvent::PointerItem item;
809     touchEvent->GetPointerItem(id, item);
810     if (item.GetToolType() == PointerEvent::TOOL_TYPE_KNUCKLE) {
811         return;
812     }
813     int32_t ret = HiSysEventWrite(
814         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
815         "FINGERSENSE_KNOCK_EVENT_INFO",
816         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
817         "SK_F_T", FINGERSENSE_EVENT_TIMES,
818         "FSF_1S_2F_C", FINGERSENSE_EVENT_TIMES,
819         "TP_INFO", GetTpVendorName(),
820         "S_INFO", GetAccVendorName(),
821         "LCD_INFO", GetLcdInfo());
822     if (ret != RET_OK) {
823         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
824     }
825 }
826 
GetTpVendorName()827 std::string DfxHisysevent::GetTpVendorName()
828 {
829     if (ROTATE_POLICY != FOLDABLE_DEVICE) {
830         return GetVendorInfo(TP_PATH);
831     }
832     auto displayMode = WIN_MGR->GetDisplayMode();
833     if (displayMode == DisplayMode::FULL) {
834         return GetVendorInfo(TP0_PATH);
835     } else if (displayMode == DisplayMode::MAIN) {
836         return GetVendorInfo(TP1_PATH);
837     }
838     return "NA";
839 }
840 
GetAccVendorName()841 std::string DfxHisysevent::GetAccVendorName()
842 {
843     if (ROTATE_POLICY != FOLDABLE_DEVICE) {
844         return GetVendorInfo(ACC_PATH);
845     }
846     return GetVendorInfo(ACC0_PATH);
847 }
848 
GetLcdInfo()849 std::string DfxHisysevent::GetLcdInfo()
850 {
851     return GetVendorInfo(LCD_PATH);
852 }
853 
ReportSubscribeKeyEvent(int32_t subscribeId,int32_t finalKey,std::string name,int32_t pid)854 void DfxHisysevent::ReportSubscribeKeyEvent(int32_t subscribeId, int32_t finalKey,
855     std::string name, int32_t pid)
856 {
857     int32_t ret = HiSysEventWrite(
858         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
859         "SUBSCRIBE_KEY_EVENT",
860         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
861         "SUBSCRIBE_ID", subscribeId,
862         "FINAL_KEY", finalKey,
863         "NAME", name,
864         "PID", pid);
865     if (ret != RET_OK) {
866         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
867     }
868 }
869 
ReportUnSubscribeKeyEvent(int32_t subscribeId,int32_t finalKey,std::string name,int32_t pid)870 void DfxHisysevent::ReportUnSubscribeKeyEvent(int32_t subscribeId, int32_t finalKey,
871     std::string name, int32_t pid)
872 {
873     int32_t ret = HiSysEventWrite(
874         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
875         "UNSUBSCRIBE_KEY_EVENT",
876         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
877         "SUBSCRIBE_ID", subscribeId,
878         "FINAL_KEY", finalKey,
879         "NAME", name,
880         "PID", pid);
881     if (ret != RET_OK) {
882         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
883     }
884 }
885 
ReportKeyboardEvent(int32_t eventType,int32_t keyCode,int32_t keyAction)886 void DfxHisysevent::ReportKeyboardEvent(int32_t eventType, int32_t keyCode, int32_t keyAction)
887 {
888     int32_t ret = HiSysEventWrite(
889         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
890         "KAYBOARD_EVENT",
891         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
892         "KEY_EVENT_TYPE", eventType,
893         "KEY_CODE", keyCode,
894         "KEY_ACTION", keyAction);
895     if (ret != RET_OK) {
896         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
897     }
898 }
899 
ReportLaunchAbility(std::string bundleName)900 void DfxHisysevent::ReportLaunchAbility(std::string bundleName)
901 {
902     int32_t ret = HiSysEventWrite(
903         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
904         "LAUNCH_ABILITY",
905         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
906         "BUNDLE_NAME", bundleName);
907     if (ret != RET_OK) {
908         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
909     }
910 }
911 
ReportCommonAction(std::string action)912 void DfxHisysevent::ReportCommonAction(std::string action)
913 {
914     int32_t ret = HiSysEventWrite(
915         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
916         "COMMON_ACTION",
917         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
918         "ACTION", action);
919     if (ret != RET_OK) {
920         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
921     }
922 }
923 
ReportTouchEvent(int32_t pointAction,int32_t pointId,int32_t windowId)924 void DfxHisysevent::ReportTouchEvent(int32_t pointAction, int32_t pointId, int32_t windowId)
925 {
926     int32_t ret = HiSysEventWrite(
927         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
928         "TOUCH_EVENT",
929         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
930         "POINT_ACTION", pointAction,
931         "POINT_ID", pointId,
932         "WINDOW_ID", windowId);
933     if (ret != RET_OK) {
934         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
935     }
936 }
937 
ReportSetCustomCursor(int32_t windowPid,int32_t windowId)938 void DfxHisysevent::ReportSetCustomCursor(int32_t windowPid, int32_t windowId)
939 {
940     int32_t ret = HiSysEventWrite(
941         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
942         "SET_CUSTOM_CURSOR",
943         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
944         "WINDOW_PID", windowPid,
945         "WINDOW_ID", windowId);
946     if (ret != RET_OK) {
947         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
948     }
949 }
950 
ReportSetMouseIcon(int32_t windowId)951 void DfxHisysevent::ReportSetMouseIcon(int32_t windowId)
952 {
953     int32_t ret = HiSysEventWrite(
954         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
955         "SET_MOUSE_ICON",
956         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
957         "WINDOW_ID", windowId);
958     if (ret != RET_OK) {
959         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
960     }
961 }
962 
ReportSetPointerStyle(int32_t windowId,int32_t pointerStyleId,bool isUiExtension)963 void DfxHisysevent::ReportSetPointerStyle(int32_t windowId, int32_t pointerStyleId, bool isUiExtension)
964 {
965     int32_t ret = HiSysEventWrite(
966         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
967         "SET_POINTER_STYLE",
968         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
969         "WINDOW_ID", windowId,
970         "POINTER_STYLE_ID", pointerStyleId,
971         "IS_UIEXTENSION", isUiExtension);
972     if (ret != RET_OK) {
973         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
974     }
975 }
976 
ReportSetPointerVisible(bool visible,int32_t priority)977 void DfxHisysevent::ReportSetPointerVisible(bool visible, int32_t priority)
978 {
979     int32_t ret = HiSysEventWrite(
980         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
981         "SET_POINTER_VISIBLE",
982         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
983         "VISIBLE", visible,
984         "PRIORITY", priority);
985     if (ret != RET_OK) {
986         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
987     }
988 }
989 
ReportSetPointerSpeed(int32_t speed)990 void DfxHisysevent::ReportSetPointerSpeed(int32_t speed)
991 {
992     int32_t ret = HiSysEventWrite(
993         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
994         "SET_POINTER_SPEED",
995         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
996         "SPEED", speed);
997     if (ret != RET_OK) {
998         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
999     }
1000 }
1001 
ReportAddInputHandler(int32_t handlerType)1002 void DfxHisysevent::ReportAddInputHandler(int32_t handlerType)
1003 {
1004     int32_t ret = HiSysEventWrite(
1005         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1006         "ADD_INPUT_HANDLER",
1007         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1008         "INPUT_HANDLER_TYPE", handlerType);
1009     if (ret != RET_OK) {
1010         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1011     }
1012 }
1013 
ReportRemoveInputHandler(int32_t handlerType)1014 void DfxHisysevent::ReportRemoveInputHandler(int32_t handlerType)
1015 {
1016     int32_t ret = HiSysEventWrite(
1017         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1018         "REMOVE_INPUT_HANDLER",
1019         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1020         "INPUT_HANDLER_TYPE", handlerType);
1021     if (ret != RET_OK) {
1022         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1023     }
1024 }
1025 
ReportInjectPointerEvent(bool isNativeInject)1026 void DfxHisysevent::ReportInjectPointerEvent(bool isNativeInject)
1027 {
1028     int32_t ret = HiSysEventWrite(
1029         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1030         "INJECT_POINTER_EVENT",
1031         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1032         "IS_NATIVE_INJECT", isNativeInject);
1033     if (ret != RET_OK) {
1034         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1035     }
1036 }
1037 
ReportEnableCombineKey(bool enable)1038 void DfxHisysevent::ReportEnableCombineKey(bool enable)
1039 {
1040     int32_t ret = HiSysEventWrite(
1041         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1042         "ENABLE_COMBINE_KEY",
1043         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1044         "ENABLE", enable);
1045     if (ret != RET_OK) {
1046         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1047     }
1048 }
1049 
ReportAppendExtraData()1050 void DfxHisysevent::ReportAppendExtraData()
1051 {
1052     int32_t ret = HiSysEventWrite(
1053         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1054         "APPEND_EXTRA_DATA",
1055         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR);
1056     if (ret != RET_OK) {
1057         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1058     }
1059 }
1060 
ReportTransmitInfrared(int64_t number)1061 void DfxHisysevent::ReportTransmitInfrared(int64_t number)
1062 {
1063     int32_t ret = HiSysEventWrite(
1064         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1065         "APPEND_EXTRA_DATA",
1066         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1067         "ENABLE", number);
1068     if (ret != RET_OK) {
1069         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1070     }
1071 }
1072 
ReportSetCurrentUser(int32_t userId)1073 void DfxHisysevent::ReportSetCurrentUser(int32_t userId)
1074 {
1075     int32_t ret = HiSysEventWrite(
1076         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1077         "SET_CURRENT_USER",
1078         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1079         "USER_ID", userId);
1080     if (ret != RET_OK) {
1081         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1082     }
1083 }
1084 
1085 #ifdef OHOS_BUILD_ENABLE_DFX_RADAR
ReportApiCallTimes(ApiDurationStatistics::Api api,int32_t durationMS)1086 void DfxHisysevent::ReportApiCallTimes(ApiDurationStatistics::Api api, int32_t durationMS)
1087 {
1088     apiDurationStatics_.RecordDuration(api, durationMS);
1089     if (!apiDurationStatics_.IsLimitMatched()) {
1090         return;
1091     }
1092     static std::vector<std::string> apiDurationBox { "<=3MS", "<=5MS", "<=10MS", ">10MS" };
1093     HiSysEventWrite(
1094         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1095         "EXTERNAL_CALL_STATISTIC",
1096         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
1097         "API_DURATION_BOX", apiDurationBox,
1098         "IS_SCREEN_CAPTURE_WORKING",
1099             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::IS_SCREEN_CAPTURE_WORKING),
1100         "GET_DEFAULT_DISPLAY",
1101             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_DEFAULT_DISPLAY),
1102         "GET_SYSTEM_ABILITY_MANAGER",
1103             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_SYSTEM_ABILITY_MANAGER),
1104         "IS_FOLDABLE",
1105             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::IS_FOLDABLE),
1106         "IS_SCREEN_LOCKED",
1107             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::IS_SCREEN_LOCKED),
1108         "RS_NOTIFY_TOUCH_EVENT",
1109             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::RS_NOTIFY_TOUCH_EVENT),
1110         "RESOURCE_SCHEDULE_REPORT_DATA",
1111             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::RESOURCE_SCHEDULE_REPORT_DATA),
1112         "GET_CUR_RENDERER_CHANGE_INFOS",
1113             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_CUR_RENDERER_CHANGE_INFOS),
1114         "GET_PROC_RUNNING_INFOS_BY_UID",
1115             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_PROC_RUNNING_INFOS_BY_UID),
1116         "TELEPHONY_CALL_MGR_INIT",
1117             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_INIT),
1118         "TELEPHONY_CALL_MGR_MUTE_RINGER",
1119             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_MUTE_RINGER),
1120         "TELEPHONY_CALL_MGR_HANG_UP_CALL",
1121             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_HANG_UP_CALL),
1122         "TELEPHONY_CALL_MGR_REJECT_CALL",
1123             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_REJECT_CALL),
1124         "RE_SCREEN_MODE_CHANGE_LISTENER",
1125             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::RE_SCREEN_MODE_CHANGE_LISTENER),
1126         "SET_ON_REMOTE_DIED_CALLBACK",
1127             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::SET_ON_REMOTE_DIED_CALLBACK),
1128         "REG_SCREEN_CAPTURE_LISTENER",
1129             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::REG_SCREEN_CAPTURE_LISTENER),
1130         "ABILITY_MGR_START_EXT_ABILITY",
1131             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::ABILITY_MGR_START_EXT_ABILITY),
1132         "ABILITY_MGR_CLIENT_START_ABILITY",
1133             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::ABILITY_MGR_CLIENT_START_ABILITY),
1134         "ABILITY_MGR_CONNECT_ABILITY",
1135             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::ABILITY_MGR_CONNECT_ABILITY),
1136         "GET_RUNNING_PROCESS_INFO_BY_PID",
1137             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_RUNNING_PROCESS_INFO_BY_PID),
1138         "REGISTER_APP_DEBUG_LISTENER",
1139             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::REGISTER_APP_DEBUG_LISTENER),
1140         "UNREGISTER_APP_DEBUG_LISTENER",
1141             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::UNREGISTER_APP_DEBUG_LISTENER),
1142         "PUBLISH_COMMON_EVENT",
1143             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::PUBLISH_COMMON_EVENT),
1144         "GET_VISIBILITY_WINDOW_INFO",
1145             apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_VISIBILITY_WINDOW_INFO)
1146         );
1147     apiDurationStatics_.ResetApiStatistics();
1148 }
1149 
ReportMMiServiceThreadLongTask(const std::string & taskName)1150 void DfxHisysevent::ReportMMiServiceThreadLongTask(const std::string &taskName)
1151 {
1152     int32_t ret = HiSysEventWrite(
1153         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1154         "MMI_LONG_TASK",
1155         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1156         "TASK_NAME", taskName);
1157     if (ret != RET_OK) {
1158         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1159     }
1160 }
1161 #endif // OHOS_BUILD_ENABLE_DFX_RADAR
1162 
ClearKeyEventCount()1163 void DfxHisysevent::ClearKeyEventCount()
1164 {
1165     calKeyEventTime_.clear();
1166     keyEventCount_ = 0;
1167 }
1168 
ReportKeyEvent(std::string name)1169 void DfxHisysevent::ReportKeyEvent(std::string name)
1170 {
1171     if (name == NAME_FILTER) {
1172         ReportKeyEventTimes(KEY_FILTER);
1173     } else if (name == NAME_INTERCEPT) {
1174         ReportKeyEventTimes(KEY_INTERCEPT);
1175     } else if (name == NAME_SUBCRIBER) {
1176         ReportKeyEventTimes(KEY_SUBCRIBER);
1177     } else if (name == NAME_FINGERPRINT) {
1178         ReportKeyEventTimes(FINGERPRINT);
1179     } else if (name == NAME_STYLUS) {
1180         ReportKeyEventTimes(STYLUS_PEN);
1181     } else if (name == BUNDLE_NAME_PARSER.GetBundleName("AIBASE_BUNDLE_NAME")) {
1182         ReportKeyEventTimes(AIBASE_VOICE);
1183     } else if (name == BUNDLE_NAME_PARSER.GetBundleName("SCREENSHOT_BUNDLE_NAME")) {
1184         ReportKeyEventTimes(SCREEN_SHOT);
1185     } else if (name == BUNDLE_NAME_PARSER.GetBundleName("SCREENRECORDER_BUNDLE_NAME")) {
1186         ReportKeyEventTimes(SCREEN_RECORDING);
1187     } else if (name == BUNDLE_NAME_PARSER.GetBundleName("WALLET_BUNDLE_NAME")) {
1188         ReportKeyEventTimes(OPEN_WALLET);
1189     } else if (name == BUNDLE_NAME_PARSER.GetBundleName("SOS_BUNDLE_NAME")) {
1190         ReportKeyEventTimes(OPEN_SOS);
1191     } else if (name == NAME_CANCEL) {
1192         ReportKeyEventTimes(KEY_EVENT_CANCEL);
1193     } else if (name == TOUCH_SCREEN_ON) {
1194         ReportKeyEventTimes(KEY_SCREEN_ON);
1195     } else {
1196         ReportKeyEventTimes(DISPATCH_KEY);
1197     }
1198 }
1199 
ReportKeyEventTimes(KEY_CONSUMPTION_TYPE type)1200 void DfxHisysevent::ReportKeyEventTimes(KEY_CONSUMPTION_TYPE type)
1201 {
1202     if (keyEventCount_ < REPORT_MAX_KEY_EVENT_TIMES) {
1203         keyEventCount_++;
1204         calKeyEventTime_[type]++;
1205     } else {
1206         int32_t ret = HiSysEventWrite(
1207             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1208             "KEY_EVENT_STATISTIC",
1209             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
1210             "DISPATCH_KEY", calKeyEventTime_[DISPATCH_KEY],
1211             "KEY_FILTER", calKeyEventTime_[KEY_FILTER],
1212             "KEY_INTERCEPT", calKeyEventTime_[KEY_INTERCEPT],
1213             "KEY_SUBCRIBER", calKeyEventTime_[KEY_SUBCRIBER],
1214             "FINGERPRINT", calKeyEventTime_[FINGERPRINT],
1215             "STYLUS_PEN", calKeyEventTime_[STYLUS_PEN],
1216             "AIBASE_VOICE", calKeyEventTime_[AIBASE_VOICE],
1217             "SCREEN_SHOT", calKeyEventTime_[SCREEN_SHOT],
1218             "SCREEN_RECORDING", calKeyEventTime_[SCREEN_RECORDING],
1219             "OPEN_WALLET", calKeyEventTime_[OPEN_WALLET],
1220             "OPEN_SOS", calKeyEventTime_[OPEN_SOS],
1221             "KEY_CANCEL", calKeyEventTime_[KEY_EVENT_CANCEL],
1222             "KEY_SCREEN_ON", calKeyEventTime_[KEY_SCREEN_ON]);
1223         if (ret != 0) {
1224             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1225         }
1226         ClearKeyEventCount();
1227     }
1228 }
1229 
ReportFailLaunchAbility(std::string bundleName,int32_t errorCode)1230 void DfxHisysevent::ReportFailLaunchAbility(std::string bundleName, int32_t errorCode)
1231 {
1232     int32_t ret = HiSysEventWrite(
1233         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1234         "KEY_EVENT_FAULT",
1235         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
1236         "BUNDLE_NAME", bundleName,
1237         "ERROR_CODE", errorCode);
1238     if (ret != 0) {
1239         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1240     }
1241 }
1242 
ReportFailSubscribeKey(std::string functionName,std::string subscribeName,int32_t keyCode,int32_t errorCode)1243 void DfxHisysevent::ReportFailSubscribeKey(std::string functionName, std::string subscribeName,
1244     int32_t keyCode, int32_t errorCode)
1245 {
1246     int32_t ret = HiSysEventWrite(
1247         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1248         "KEY_EVENT_FAULT",
1249         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
1250         "FUNCTION_NAME", functionName,
1251         "SUBSCRIBE_NAME", subscribeName,
1252         "KEY_CODE", keyCode,
1253         "ERROR_CODE", errorCode);
1254     if (ret != 0) {
1255         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1256     }
1257 }
1258 
ReportFailHandleKey(std::string name,int32_t keyCode,int32_t errorCode)1259 void DfxHisysevent::ReportFailHandleKey(std::string name, int32_t keyCode, int32_t errorCode)
1260 {
1261     int32_t ret = HiSysEventWrite(
1262         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1263         "KEY_EVENT_FAULT",
1264         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
1265         "FUNCTION_NAME", name,
1266         "KEY_CODE", keyCode,
1267         "ERROR_CODE", errorCode);
1268     if (ret != 0) {
1269         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1270     }
1271 }
1272 
ReportCallingMute()1273 void DfxHisysevent::ReportCallingMute()
1274 {
1275     int32_t ret = HiSysEventWrite(
1276         WATCH_CROWN_MUTE,
1277         "CALL_UI_WATCH_CROWN_MUTE",
1278         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
1279         "PNAMEID", "",
1280         "PVERSIONID", "",
1281         "MUTE_TYPE", 1);
1282     if (ret != 0) {
1283         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1284     }
1285 }
1286 } // namespace MMI
1287 } // namespace OHOS