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