• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "dfx_hisysevent.h"
17 
18 #include "input_windows_manager.h"
19 
20 namespace OHOS {
21 namespace MMI {
22 namespace {
23 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, MMI_LOG_DOMAIN, "DfxHisysevent" };
24 constexpr int32_t INVALID_DEVICE_ID = -1;
25 constexpr uint32_t REPORT_DISPATCH_TIMES = 100;
26 constexpr uint32_t REPORT_COMBO_START_TIMES = 100;
27 constexpr uint32_t POINTER_CLEAR_TIMES = 10;
28 constexpr int32_t CONVERSION_US_TO_MS = 1000;
29 constexpr int32_t TIMES_LEVEL1 = 10;
30 constexpr int32_t TIMES_LEVEL2 = 25;
31 constexpr int32_t TIMES_LEVEL3 = 30;
32 constexpr int32_t TIMES_LEVEL4 = 50;
33 constexpr int32_t FINGERSENSE_EVENT_TIMES = 1;
34 constexpr size_t SINGLE_KNUCKLE_SIZE = 1;
35 constexpr size_t DOUBLE_KNUCKLE_SIZE = 2;
36 const std::string EMPTY_STRING { "" };
37 } // namespace
38 
OnDeviceConnect(int32_t id,OHOS::HiviewDFX::HiSysEvent::EventType type)39 void DfxHisysevent::OnDeviceConnect(int32_t id, OHOS::HiviewDFX::HiSysEvent::EventType type)
40 {
41     std::shared_ptr dev = InputDevMgr->GetInputDevice(id);
42     CHKPV(dev);
43     std::string message;
44     std::string name = "";
45     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::FAULT) {
46         message = "The input_device connection failed for already existing";
47         name = "INPUT_DEV_CONNECTION_FAILURE";
48     } else {
49         message = "The input_device connection succeed";
50         name = "INPUT_DEV_CONNECTION_SUCCESS";
51     }
52     if (id == INT32_MAX) {
53         int32_t ret = HiSysEventWrite(
54             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
55             name,
56             type,
57             "MSG", "The input_device connection failed because the nextId_ exceeded the upper limit");
58         if (ret != 0) {
59             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
60         }
61     } else {
62         int32_t ret = HiSysEventWrite(
63             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
64             name,
65             type,
66             "DEVICE_ID", id,
67             "DEVICE_PHYS", dev->GetPhys(),
68             "DEVICE_NAME", dev->GetName(),
69             "DEVICE_TYPE", dev->GetType(),
70             "MSG", message);
71         if (ret != 0) {
72             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
73         }
74     }
75 }
76 
OnDeviceDisconnect(int32_t id,OHOS::HiviewDFX::HiSysEvent::EventType type)77 void DfxHisysevent::OnDeviceDisconnect(int32_t id, OHOS::HiviewDFX::HiSysEvent::EventType type)
78 {
79     if (id == INVALID_DEVICE_ID) {
80         int32_t ret = HiSysEventWrite(
81             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
82             "INPUT_DEV_DISCONNECTION_FAILURE",
83             type,
84             "MSG", "The input device failed to disconnect to server");
85         if (ret != 0) {
86             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
87         }
88     } else {
89         std::shared_ptr dev = InputDevMgr->GetInputDevice(id);
90         CHKPV(dev);
91         int32_t ret = HiSysEventWrite(
92             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
93             "INPUT_DEV_DISCONNECTION_SUCCESS",
94             type,
95             "DEVICE_Id", id,
96             "DEVICE_PHYS", dev->GetPhys(),
97             "DEVICE_NAME", dev->GetName(),
98             "DEVICE_TYPE", dev->GetType(),
99             "MSG", "The input device successfully disconnect to server");
100         if (ret != 0) {
101             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
102         }
103     }
104 }
105 
OnClientConnect(const ClientConnectData & data,OHOS::HiviewDFX::HiSysEvent::EventType type)106 void DfxHisysevent::OnClientConnect(const ClientConnectData &data, OHOS::HiviewDFX::HiSysEvent::EventType type)
107 {
108     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
109         int32_t ret = HiSysEventWrite(
110             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
111             "CLIENT_CONNECTION_SUCCESS",
112             type,
113             "PID", data.pid,
114             "UID", data.uid,
115             "MODULE_TYPE", data.moduleType,
116             "SERVER_FD", data.serverFd,
117             "PROGRAMNAME", data.programName,
118             "MSG", "The client successfully connected to the server");
119         if (ret != 0) {
120             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
121         }
122     } else {
123         int32_t ret = HiSysEventWrite(
124             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
125             "CLIENT_CONNECTION_FAILURE",
126             type,
127             "PID", data.pid,
128             "UID", data.uid,
129             "MODULE_TYPE", data.moduleType,
130             "PROGRAMNAME", data.programName,
131             "MSG", "The client failed to connect to the server");
132         if (ret != 0) {
133             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
134         }
135     }
136 }
137 
OnClientDisconnect(const SessionPtr & secPtr,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)138 void DfxHisysevent::OnClientDisconnect(const SessionPtr& secPtr, int32_t fd,
139     OHOS::HiviewDFX::HiSysEvent::EventType type)
140 {
141     CHKPV(secPtr);
142     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
143         int32_t ret = HiSysEventWrite(
144             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
145             "CLIENT_DISCONNECTION_SUCCESS",
146             type,
147             "PID", secPtr->GetPid(),
148             "UID", secPtr->GetUid(),
149             "MODULE_TYPE", secPtr->GetModuleType(),
150             "FD", fd,
151             "PROGRAMNAME", secPtr->GetProgramName(),
152             "MSG", "The client successfully disconnected to the server");
153         if (ret != 0) {
154             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
155         }
156     } else {
157         if (secPtr == nullptr) {
158             int32_t ret = HiSysEventWrite(
159                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
160                 "CLIENT_DISCONNECTION_FAILURE",
161                 type,
162                 "MSG", "The client failed to disconnect to the server because secPtr is nullptr");
163             if (ret != 0) {
164                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
165             }
166         } else {
167             int32_t ret = HiSysEventWrite(
168                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
169                 "CLIENT_DISCONNECTION_FAILURE",
170                 type,
171                 "MSG", "The client failed to disconnect to the server because close(fd) return error");
172             if (ret != 0) {
173                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
174             }
175         }
176     }
177 }
178 
OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)179 void DfxHisysevent::OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer, int32_t fd,
180     OHOS::HiviewDFX::HiSysEvent::EventType type)
181 {
182     CHKPV(pointer);
183     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
184         int32_t ret = HiSysEventWrite(
185             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
186             "TARGET_POINTER_EVENT_SUCCESS",
187             type,
188             "EVENTTYPE", pointer->GetEventType(),
189             "AGENT_WINDOWID", pointer->GetAgentWindowId(),
190             "TARGET_WINDOWID", pointer->GetTargetWindowId(),
191             "PID", WinMgr->GetWindowPid(pointer->GetTargetWindowId()),
192             "FD", fd,
193             "MSG", "The window manager successfully update target pointer");
194         if (ret != 0) {
195             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
196         }
197     } else {
198         int32_t ret = HiSysEventWrite(
199             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
200             "TARGET_POINTER_EVENT_FAILURE",
201             OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
202             "EVENTTYPE", pointer->GetEventType(),
203             "MSG", "The window manager failed to update target pointer");
204         if (ret != 0) {
205             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
206         }
207     }
208 }
209 
OnUpdateTargetKey(std::shared_ptr<KeyEvent> key,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)210 void DfxHisysevent::OnUpdateTargetKey(std::shared_ptr<KeyEvent> key, int32_t fd,
211     OHOS::HiviewDFX::HiSysEvent::EventType type)
212 {
213     CHKPV(key);
214     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
215         int32_t ret = HiSysEventWrite(
216             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
217             "TARGET_KEY_EVENT_SUCCESS",
218             type,
219             "EVENTTYPE", key->GetEventType(),
220             "KEYCODE", key->GetKeyCode(),
221             "ACTION", key->GetAction(),
222             "ACTION_TIME", key->GetActionTime(),
223             "ACTION_STARTTIME", key->GetActionStartTime(),
224             "FLAG", key->GetFlag(),
225             "KEYACTION", key->GetKeyAction(),
226             "FD", fd,
227             "AGENT_WINDOWID", key->GetAgentWindowId(),
228             "TARGET_WINDOWID", key->GetTargetWindowId(),
229             "PID", WinMgr->GetWindowPid(key->GetTargetWindowId()),
230             "MSG", "The window manager successfully update target key");
231         if (ret != 0) {
232             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
233         }
234     } else {
235         int32_t ret = HiSysEventWrite(
236             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
237             "TARGET_KEY_EVENT_FAILURE",
238             type,
239             "EVENTTYPE", key->GetEventType(),
240             "KEYCODE", key->GetKeyCode(),
241             "ACTION", key->GetAction(),
242             "ACTION_TIME", key->GetActionTime(),
243             "ACTION_STARTTIME", key->GetActionStartTime(),
244             "FLAG", key->GetFlag(),
245             "KEYACTION", key->GetKeyAction(),
246             "MSG", "The window manager failed to update target key");
247         if (ret != 0) {
248             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
249         }
250     }
251 }
252 
OnFocusWindowChanged(int32_t oldFocusWindowId,int32_t newFocusWindowId,int32_t oldFocusWindowPid,int32_t newFocusWindowPid)253 void DfxHisysevent::OnFocusWindowChanged(int32_t oldFocusWindowId, int32_t newFocusWindowId,
254     int32_t oldFocusWindowPid, int32_t newFocusWindowPid)
255 {
256     int32_t ret = HiSysEventWrite(
257         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
258         "FOCUS_WINDOW_CHANGE",
259         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
260         "OLD_FOCUS_WINDOWID", oldFocusWindowId,
261         "NEW_FOCUS_WINDOWID", newFocusWindowId,
262         "OLD_FOCUS_WINDOWPID", oldFocusWindowPid,
263         "NEW_FOCUS_WINDOWPID", newFocusWindowPid,
264         "MSG", "The focusWindowId changing succeeded");
265     if (ret != 0) {
266         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
267     }
268 }
269 
OnZorderWindowChanged(int32_t oldZorderFirstWindowId,int32_t newZorderFirstWindowId,int32_t oldZorderFirstWindowPid,int32_t newZorderFirstWindowPid)270 void DfxHisysevent::OnZorderWindowChanged(int32_t oldZorderFirstWindowId, int32_t newZorderFirstWindowId,
271     int32_t oldZorderFirstWindowPid, int32_t newZorderFirstWindowPid)
272 {
273     int32_t ret = HiSysEventWrite(
274         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
275         "Z_ORDER_WINDOW_CHANGE",
276         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
277         "OLD_ZORDER_FIRST_WINDOWID", oldZorderFirstWindowId,
278         "NEW_ZORDER_FIRST_WINDOWID", newZorderFirstWindowId,
279         "OLD_ZORDER_FIRST_WINDOWPID", oldZorderFirstWindowPid,
280         "NEW_ZORDER_FIRST_WINDOWPID", newZorderFirstWindowPid,
281         "MSG", "The ZorderFirstWindow changing succeeded");
282     if (ret != 0) {
283         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
284     }
285 }
286 
OnLidSwitchChanged(int32_t lidSwitch)287 void DfxHisysevent::OnLidSwitchChanged(int32_t lidSwitch)
288 {
289     int32_t ret = HiSysEventWrite(
290         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
291         "LID_SWITCH",
292         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
293         "SWITCH", lidSwitch);
294     if (ret != 0) {
295         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
296     }
297 }
298 
ApplicationBlockInput(const SessionPtr & sess)299 void DfxHisysevent::ApplicationBlockInput(const SessionPtr& sess)
300 {
301     int32_t ret = HiSysEventWrite(
302         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
303         "APPLICATION_BLOCK_INPUT",
304         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
305         "PID", sess->GetPid(),
306         "UID", sess->GetUid(),
307         "PACKAGE_NAME", sess->GetProgramName(),
308         "PROCESS_NAME", sess->GetProgramName(),
309         "MSG", "User input does not respond");
310     if (ret != 0) {
311         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
312     }
313 }
314 
CalcKeyDispTimes()315 void DfxHisysevent::CalcKeyDispTimes()
316 {
317     int64_t endTime = GetSysClockTime();
318     dispCastTime_.totalTimes++;
319     int64_t castTime = (endTime - dispatchStartTime_)  / CONVERSION_US_TO_MS;
320     if (castTime <= TIMES_LEVEL1) {
321         dispCastTime_.below10msTimes++;
322     } else if (castTime <= TIMES_LEVEL2) {
323         dispCastTime_.below25msTimes++;
324     } else if (castTime <= TIMES_LEVEL4) {
325         dispCastTime_.below50msTimes++;
326     } else {
327         dispCastTime_.above50msTimes++;
328     }
329 }
330 
CalcPointerDispTimes()331 void DfxHisysevent::CalcPointerDispTimes()
332 {
333     int64_t endTime = GetSysClockTime();
334     dispCastTime_.sampleCount++;
335     int64_t castTime = (endTime - dispatchStartTime_)  / CONVERSION_US_TO_MS;
336     if (dispCastTime_.sampleCount == POINTER_CLEAR_TIMES) {
337         dispCastTime_.sampleCount = 0;
338         dispCastTime_.totalTimes++;
339         if (castTime <= TIMES_LEVEL1) {
340             dispCastTime_.below10msTimes++;
341         } else if (castTime <= TIMES_LEVEL2) {
342             dispCastTime_.below25msTimes++;
343         } else if (castTime <= TIMES_LEVEL4) {
344             dispCastTime_.below50msTimes++;
345         } else {
346             dispCastTime_.above50msTimes++;
347         }
348     }
349 }
350 
ReportDispTimes()351 void DfxHisysevent::ReportDispTimes()
352 {
353     if (dispCastTime_.totalTimes >= REPORT_DISPATCH_TIMES) {
354         int32_t ret = HiSysEventWrite(
355             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
356             "INPUT_DISPATCH_TIME",
357             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
358             "BELOW10MS", dispCastTime_.below10msTimes,
359             "BELOW25MS", dispCastTime_.below25msTimes,
360             "BELOW50MS", dispCastTime_.below50msTimes,
361             "ABOVE50MS", dispCastTime_.above50msTimes,
362             "MSG", "The costing time to dispatch event");
363         if (ret != 0) {
364             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
365         } else {
366             dispCastTime_.sampleCount = 0;
367             dispCastTime_.totalTimes = 0;
368             dispCastTime_.below10msTimes = 0;
369             dispCastTime_.below25msTimes = 0;
370             dispCastTime_.below50msTimes = 0;
371             dispCastTime_.above50msTimes = 0;
372         }
373     }
374 }
375 
CalcComboStartTimes(const int32_t keyDownDuration)376 void DfxHisysevent::CalcComboStartTimes(const int32_t keyDownDuration)
377 {
378     int64_t endTime = GetSysClockTime();
379     comboStartCastTime_.totalTimes++;
380     int64_t castTime = (endTime - comboStartTime_) / CONVERSION_US_TO_MS - keyDownDuration;
381     if (castTime <= TIMES_LEVEL1) {
382         comboStartCastTime_.below10msTimes++;
383     } else if (castTime <= TIMES_LEVEL3) {
384         comboStartCastTime_.below30msTimes++;
385     } else if (castTime <= TIMES_LEVEL4) {
386         comboStartCastTime_.below50msTimes++;
387     } else {
388         comboStartCastTime_.above50msTimes++;
389     }
390 }
391 
ReportComboStartTimes()392 void DfxHisysevent::ReportComboStartTimes()
393 {
394     if (comboStartCastTime_.totalTimes >= REPORT_COMBO_START_TIMES) {
395         int32_t ret = HiSysEventWrite(
396             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
397             "COMBO_START_TIME",
398             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
399             "BELOW10MS", comboStartCastTime_.below10msTimes,
400             "BELOW30MS", comboStartCastTime_.below30msTimes,
401             "BELOW50MS", comboStartCastTime_.below50msTimes,
402             "ABOVE50MS", comboStartCastTime_.above50msTimes,
403             "MSG", "The costing time to launch application of combination");
404         if (ret != 0) {
405             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
406         } else {
407             comboStartCastTime_.totalTimes = 0;
408             comboStartCastTime_.below10msTimes = 0;
409             comboStartCastTime_.below30msTimes = 0;
410             comboStartCastTime_.below50msTimes = 0;
411             comboStartCastTime_.above50msTimes = 0;
412         }
413     }
414 }
415 
ReportPowerInfo(std::shared_ptr<KeyEvent> key,OHOS::HiviewDFX::HiSysEvent::EventType type)416 void DfxHisysevent::ReportPowerInfo(std::shared_ptr<KeyEvent> key, OHOS::HiviewDFX::HiSysEvent::EventType type)
417 {
418     if (key == nullptr) {
419         MMI_HILOGE("get key is failed");
420         return;
421     }
422     if (key->GetKeyAction() == KeyEvent::KEY_ACTION_UP) {
423         int32_t ret = HiSysEventWrite(
424             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
425             "INPUT_POWER_UP",
426             type);
427         if (ret != RET_OK) {
428             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
429         }
430     } else if (key->GetKeyAction() == KeyEvent::KEY_ACTION_DOWN) {
431         int32_t ret = HiSysEventWrite(
432             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
433             "INPUT_POWER_DOWN",
434             type);
435         if (ret != RET_OK) {
436             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
437         }
438     } else {
439         MMI_HILOGW("press power key is error");
440     }
441 }
442 
StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)443 void DfxHisysevent::StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)
444 {
445     CHKPV(pointerEvent);
446     int32_t pointerAction = pointerEvent->GetPointerAction();
447     int32_t fingerCount = pointerEvent->GetFingerCount();
448 
449     if (pointerAction == PointerEvent::POINTER_ACTION_AXIS_BEGIN) {
450         int32_t ret = HiSysEventWrite(
451             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
452             "TOUCHPAD_PINCH",
453             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
454             "FINGER_COUNT", fingerCount);
455         if (ret != RET_OK) {
456             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
457         }
458     } else if (pointerAction == PointerEvent::POINTER_ACTION_SWIPE_BEGIN) {
459         int32_t ret = HiSysEventWrite(
460             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
461             "TOUCHPAD_SWIPE",
462             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
463             "FINGER_COUNT", fingerCount);
464         if (ret != RET_OK) {
465             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
466         }
467     } else {
468         MMI_HILOGW("HiviewDFX Statistic touchpad gesture is error, pointer action is invalid.");
469     }
470 }
471 
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,bool flag)472 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, bool flag)
473 {
474     const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
475         { TOUCHPAD_SCROLL_SETTING, "TOUCHPAD_SCROLL_SETTING" },
476         { TOUCHPAD_SCROLL_DIR_SETTING, "TOUCHPAD_SCROLL_DIR_SETTING" },
477         { TOUCHPAD_TAP_SETTING, "TOUCHPAD_TAP_SETTING" },
478         { TOUCHPAD_SWIPE_SETTING, "TOUCHPAD_SWIPE_SETTING" },
479         { TOUCHPAD_PINCH_SETTING, "TOUCHPAD_PINCH_SETTING" },
480     };
481 
482     auto it = mapSettingCodeToSettingType.find(settingCode);
483     if (it == mapSettingCodeToSettingType.end()) {
484         MMI_HILOGE("HiviewDFX Report touchpad setting state is error, setting code is invalid.");
485         return;
486     }
487     std::string name = it->second;
488 
489     int32_t ret = HiSysEventWrite(
490         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
491         name,
492         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
493         "SWITCH_STATE", flag);
494     if (ret != RET_OK) {
495         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
496     }
497 }
498 
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,int32_t value)499 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, int32_t value)
500 {
501     const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
502         { TOUCHPAD_POINTER_SPEED_SETTING, "TOUCHPAD_POINTER_SPEED_SETTING" },
503         { TOUCHPAD_RIGHT_CLICK_SETTING, "TOUCHPAD_RIGHT_CLICK_SETTING" },
504     };
505 
506     auto it = mapSettingCodeToSettingType.find(settingCode);
507     if (it == mapSettingCodeToSettingType.end()) {
508         MMI_HILOGW("HiviewDFX Report touchpad setting state is error, setting code is invalid.");
509         return;
510     }
511     std::string name = it->second;
512 
513     int32_t ret = HiSysEventWrite(
514         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
515         name,
516         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
517         "SWITCH_VALUE", value);
518     if (ret != RET_OK) {
519         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
520     }
521 }
522 
ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime)523 void DfxHisysevent::ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime)
524 {
525     int32_t ret = HiSysEventWrite(
526         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
527         "FINGERSENSE_KNOCK_EVENT_INFO",
528         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
529         "SK_S_T", FINGERSENSE_EVENT_TIMES,
530         "SKS_T_I", intervalTime);
531     if (ret != RET_OK) {
532         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
533     }
534 }
535 
ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent,int32_t intervalTime)536 void DfxHisysevent::ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent, int32_t intervalTime)
537 {
538     CHKPV(touchEvent);
539     size_t size = touchEvent->GetPointerIds().size();
540     std::string knuckleFailCount;
541     std::string invalidTimeFailCount;
542     if (size == SINGLE_KNUCKLE_SIZE) {
543         knuckleFailCount = "FSF_T_C";
544         invalidTimeFailCount = "SK_F_T";
545     } else if (size == DOUBLE_KNUCKLE_SIZE) {
546         knuckleFailCount = "DKF_T_I";
547         invalidTimeFailCount = "DK_F_T";
548     } else {
549         MMI_HILOGE("HiviewDFX Report knuckle state error, knuckle size: %{public}zu.", size);
550         return;
551     }
552     int32_t ret = HiSysEventWrite(
553         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
554         "FINGERSENSE_KNOCK_EVENT_INFO",
555         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
556         knuckleFailCount, FINGERSENSE_EVENT_TIMES,
557         "SKF_T_I", intervalTime,
558         invalidTimeFailCount, FINGERSENSE_EVENT_TIMES);
559     if (ret != RET_OK) {
560         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
561     }
562 }
563 
ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent,float distance)564 void DfxHisysevent::ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent, float distance)
565 {
566     CHKPV(touchEvent);
567     int32_t ret = HiSysEventWrite(
568         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
569         "FINGERSENSE_KNOCK_EVENT_INFO",
570         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
571         "SK_F_T", FINGERSENSE_EVENT_TIMES,
572         "DKF_D_I", distance,
573         "FSF_D_C", FINGERSENSE_EVENT_TIMES);
574     if (ret != RET_OK) {
575         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
576     }
577 }
578 
ReportKnuckleClickEvent()579 void DfxHisysevent::ReportKnuckleClickEvent()
580 {
581     int32_t ret = HiSysEventWrite(
582         OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
583         "KNUCKLE_CLICK",
584         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
585         "PNAMEID", EMPTY_STRING,
586         "PVERSIONID", EMPTY_STRING);
587     if (ret != RET_OK) {
588         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
589     }
590 }
591 
ReportScreenCaptureGesture()592 void DfxHisysevent::ReportScreenCaptureGesture()
593 {
594     int32_t ret = HiSysEventWrite(
595         OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
596         "SINGLE_KNUCKLE_DOUBLE_CLICK",
597         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
598         "PNAMEID", EMPTY_STRING,
599         "PVERSIONID", EMPTY_STRING);
600     if (ret != RET_OK) {
601         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
602     }
603 }
604 }
605 }