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