• 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 } // namespace
34 
OnDeviceConnect(int32_t id,OHOS::HiviewDFX::HiSysEvent::EventType type)35 void DfxHisysevent::OnDeviceConnect(int32_t id, OHOS::HiviewDFX::HiSysEvent::EventType type)
36 {
37     std::shared_ptr dev = InputDevMgr->GetInputDevice(id);
38     CHKPV(dev);
39     std::string message;
40     std::string name = "";
41     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::FAULT) {
42         message = "The input_device connection failed for already existing";
43         name = "INPUT_DEV_CONNECTION_FAILURE";
44     } else {
45         message = "The input_device connection succeed";
46         name = "INPUT_DEV_CONNECTION_SUCCESS";
47     }
48     if (id == INT32_MAX) {
49         int32_t ret = HiSysEventWrite(
50             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
51             name,
52             type,
53             "MSG", "The input_device connection failed because the nextId_ exceeded the upper limit");
54         if (ret != 0) {
55             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
56         }
57     } else {
58         int32_t ret = HiSysEventWrite(
59             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
60             name,
61             type,
62             "DEVICE_ID", id,
63             "DEVICE_PHYS", dev->GetPhys(),
64             "DEVICE_NAME", dev->GetName(),
65             "DEVICE_TYPE", dev->GetType(),
66             "MSG", message);
67         if (ret != 0) {
68             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
69         }
70     }
71 }
72 
OnDeviceDisconnect(int32_t id,OHOS::HiviewDFX::HiSysEvent::EventType type)73 void DfxHisysevent::OnDeviceDisconnect(int32_t id, OHOS::HiviewDFX::HiSysEvent::EventType type)
74 {
75     if (id == INVALID_DEVICE_ID) {
76         int32_t ret = HiSysEventWrite(
77             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
78             "INPUT_DEV_DISCONNECTION_FAILURE",
79             type,
80             "MSG", "The input device failed to disconnect to server");
81         if (ret != 0) {
82             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
83         }
84     } else {
85         std::shared_ptr dev = InputDevMgr->GetInputDevice(id);
86         CHKPV(dev);
87         int32_t ret = HiSysEventWrite(
88             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
89             "INPUT_DEV_DISCONNECTION_SUCCESS",
90             type,
91             "DEVICE_Id", id,
92             "DEVICE_PHYS", dev->GetPhys(),
93             "DEVICE_NAME", dev->GetName(),
94             "DEVICE_TYPE", dev->GetType(),
95             "MSG", "The input device successfully disconnect to server");
96         if (ret != 0) {
97             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
98         }
99     }
100 }
101 
OnClientConnect(const ClientConnectData & data,OHOS::HiviewDFX::HiSysEvent::EventType type)102 void DfxHisysevent::OnClientConnect(const ClientConnectData &data, OHOS::HiviewDFX::HiSysEvent::EventType type)
103 {
104     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
105         int32_t ret = HiSysEventWrite(
106             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
107             "CLIENT_CONNECTION_SUCCESS",
108             type,
109             "PID", data.pid,
110             "UID", data.uid,
111             "MODULE_TYPE", data.moduleType,
112             "SERVER_FD", data.serverFd,
113             "PROGRAMNAME", data.programName,
114             "MSG", "The client successfully connected to the server");
115         if (ret != 0) {
116             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
117         }
118     } else {
119         int32_t ret = HiSysEventWrite(
120             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
121             "CLIENT_CONNECTION_FAILURE",
122             type,
123             "PID", data.pid,
124             "UID", data.uid,
125             "MODULE_TYPE", data.moduleType,
126             "PROGRAMNAME", data.programName,
127             "MSG", "The client failed to connect to the server");
128         if (ret != 0) {
129             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
130         }
131     }
132 }
133 
OnClientDisconnect(const SessionPtr & secPtr,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)134 void DfxHisysevent::OnClientDisconnect(const SessionPtr& secPtr, int32_t fd,
135     OHOS::HiviewDFX::HiSysEvent::EventType type)
136 {
137     CHKPV(secPtr);
138     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
139         int32_t ret = HiSysEventWrite(
140             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
141             "CLIENT_DISCONNECTION_SUCCESS",
142             type,
143             "PID", secPtr->GetPid(),
144             "UID", secPtr->GetUid(),
145             "MODULE_TYPE", secPtr->GetModuleType(),
146             "FD", fd,
147             "PROGRAMNAME", secPtr->GetProgramName(),
148             "MSG", "The client successfully disconnected to the server");
149         if (ret != 0) {
150             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
151         }
152     } else {
153         if (secPtr == nullptr) {
154             int32_t ret = HiSysEventWrite(
155                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
156                 "CLIENT_DISCONNECTION_FAILURE",
157                 type,
158                 "MSG", "The client failed to disconnect to the server because secPtr is nullptr");
159             if (ret != 0) {
160                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
161             }
162         } else {
163             int32_t ret = HiSysEventWrite(
164                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
165                 "CLIENT_DISCONNECTION_FAILURE",
166                 type,
167                 "MSG", "The client failed to disconnect to the server because close(fd) return error");
168             if (ret != 0) {
169                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
170             }
171         }
172     }
173 }
174 
OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)175 void DfxHisysevent::OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer, int32_t fd,
176     OHOS::HiviewDFX::HiSysEvent::EventType type)
177 {
178     CHKPV(pointer);
179     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
180         int32_t ret = HiSysEventWrite(
181             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
182             "TARGET_POINTER_EVENT_SUCCESS",
183             type,
184             "EVENTTYPE", pointer->GetEventType(),
185             "AGENT_WINDOWID", pointer->GetAgentWindowId(),
186             "TARGET_WINDOWID", pointer->GetTargetWindowId(),
187             "PID", WinMgr->GetWindowPid(pointer->GetTargetWindowId()),
188             "FD", fd,
189             "MSG", "The window manager successfully update target pointer");
190         if (ret != 0) {
191             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
192         }
193     } else {
194         int32_t ret = HiSysEventWrite(
195             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
196             "TARGET_POINTER_EVENT_FAILURE",
197             OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
198             "EVENTTYPE", pointer->GetEventType(),
199             "MSG", "The window manager failed to update target pointer");
200         if (ret != 0) {
201             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
202         }
203     }
204 }
205 
OnUpdateTargetKey(std::shared_ptr<KeyEvent> key,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)206 void DfxHisysevent::OnUpdateTargetKey(std::shared_ptr<KeyEvent> key, int32_t fd,
207     OHOS::HiviewDFX::HiSysEvent::EventType type)
208 {
209     CHKPV(key);
210     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
211         int32_t ret = HiSysEventWrite(
212             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
213             "TARGET_KEY_EVENT_SUCCESS",
214             type,
215             "EVENTTYPE", key->GetEventType(),
216             "KEYCODE", key->GetKeyCode(),
217             "ACTION", key->GetAction(),
218             "ACTION_TIME", key->GetActionTime(),
219             "ACTION_STARTTIME", key->GetActionStartTime(),
220             "FLAG", key->GetFlag(),
221             "KEYACTION", key->GetKeyAction(),
222             "FD", fd,
223             "AGENT_WINDOWID", key->GetAgentWindowId(),
224             "TARGET_WINDOWID", key->GetTargetWindowId(),
225             "PID", WinMgr->GetWindowPid(key->GetTargetWindowId()),
226             "MSG", "The window manager successfully update target key");
227         if (ret != 0) {
228             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
229         }
230     } else {
231         int32_t ret = HiSysEventWrite(
232             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
233             "TARGET_KEY_EVENT_FAILURE",
234             type,
235             "EVENTTYPE", key->GetEventType(),
236             "KEYCODE", key->GetKeyCode(),
237             "ACTION", key->GetAction(),
238             "ACTION_TIME", key->GetActionTime(),
239             "ACTION_STARTTIME", key->GetActionStartTime(),
240             "FLAG", key->GetFlag(),
241             "KEYACTION", key->GetKeyAction(),
242             "MSG", "The window manager failed to update target key");
243         if (ret != 0) {
244             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
245         }
246     }
247 }
248 
OnFocusWindowChanged(int32_t oldFocusWindowId,int32_t newFocusWindowId,int32_t oldFocusWindowPid,int32_t newFocusWindowPid)249 void DfxHisysevent::OnFocusWindowChanged(int32_t oldFocusWindowId, int32_t newFocusWindowId,
250     int32_t oldFocusWindowPid, int32_t newFocusWindowPid)
251 {
252     int32_t ret = HiSysEventWrite(
253         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
254         "FOCUS_WINDOW_CHANGE",
255         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
256         "OLD_FOCUS_WINDOWID", oldFocusWindowId,
257         "NEW_FOCUS_WINDOWID", newFocusWindowId,
258         "OLD_FOCUS_WINDOWPID", oldFocusWindowPid,
259         "NEW_FOCUS_WINDOWPID", newFocusWindowPid,
260         "MSG", "The focusWindowId changing succeeded");
261     if (ret != 0) {
262         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
263     }
264 }
265 
OnZorderWindowChanged(int32_t oldZorderFirstWindowId,int32_t newZorderFirstWindowId,int32_t oldZorderFirstWindowPid,int32_t newZorderFirstWindowPid)266 void DfxHisysevent::OnZorderWindowChanged(int32_t oldZorderFirstWindowId, int32_t newZorderFirstWindowId,
267     int32_t oldZorderFirstWindowPid, int32_t newZorderFirstWindowPid)
268 {
269     int32_t ret = HiSysEventWrite(
270         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
271         "Z_ORDER_WINDOW_CHANGE",
272         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
273         "OLD_ZORDER_FIRST_WINDOWID", oldZorderFirstWindowId,
274         "NEW_ZORDER_FIRST_WINDOWID", newZorderFirstWindowId,
275         "OLD_ZORDER_FIRST_WINDOWPID", oldZorderFirstWindowPid,
276         "NEW_ZORDER_FIRST_WINDOWPID", newZorderFirstWindowPid,
277         "MSG", "The ZorderFirstWindow changing succeeded");
278     if (ret != 0) {
279         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
280     }
281 }
282 
OnLidSwitchChanged(int32_t lidSwitch)283 void DfxHisysevent::OnLidSwitchChanged(int32_t lidSwitch)
284 {
285     int32_t ret = HiSysEventWrite(
286         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
287         "LID_SWITCH",
288         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
289         "SWITCH", lidSwitch);
290     if (ret != 0) {
291         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
292     }
293 }
294 
ApplicationBlockInput(const SessionPtr & sess)295 void DfxHisysevent::ApplicationBlockInput(const SessionPtr& sess)
296 {
297     int32_t ret = HiSysEventWrite(
298         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
299         "APPLICATION_BLOCK_INPUT",
300         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
301         "PID", sess->GetPid(),
302         "UID", sess->GetUid(),
303         "PACKAGE_NAME", sess->GetProgramName(),
304         "PROCESS_NAME", sess->GetProgramName(),
305         "MSG", "User input does not respond");
306     if (ret != 0) {
307         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
308     }
309 }
310 
CalcKeyDispTimes()311 void DfxHisysevent::CalcKeyDispTimes()
312 {
313     int64_t endTime = GetSysClockTime();
314     dispCastTime_.totalTimes++;
315     int64_t castTime = (endTime - dispatchStartTime_)  / CONVERSION_US_TO_MS;
316     if (castTime <= TIMES_LEVEL1) {
317         dispCastTime_.below10msTimes++;
318     } else if (castTime <= TIMES_LEVEL2) {
319         dispCastTime_.below25msTimes++;
320     } else if (castTime <= TIMES_LEVEL4) {
321         dispCastTime_.below50msTimes++;
322     } else {
323         dispCastTime_.above50msTimes++;
324     }
325 }
326 
CalcPointerDispTimes()327 void DfxHisysevent::CalcPointerDispTimes()
328 {
329     int64_t endTime = GetSysClockTime();
330     dispCastTime_.sampleCount++;
331     int64_t castTime = (endTime - dispatchStartTime_)  / CONVERSION_US_TO_MS;
332     if (dispCastTime_.sampleCount == POINTER_CLEAR_TIMES) {
333         dispCastTime_.sampleCount = 0;
334         dispCastTime_.totalTimes++;
335         if (castTime <= TIMES_LEVEL1) {
336             dispCastTime_.below10msTimes++;
337         } else if (castTime <= TIMES_LEVEL2) {
338             dispCastTime_.below25msTimes++;
339         } else if (castTime <= TIMES_LEVEL4) {
340             dispCastTime_.below50msTimes++;
341         } else {
342             dispCastTime_.above50msTimes++;
343         }
344     }
345 }
346 
ReportDispTimes()347 void DfxHisysevent::ReportDispTimes()
348 {
349     if (dispCastTime_.totalTimes >= REPORT_DISPATCH_TIMES) {
350         int32_t ret = HiSysEventWrite(
351             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
352             "INPUT_DISPATCH_TIME",
353             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
354             "BELOW10MS", dispCastTime_.below10msTimes,
355             "BELOW25MS", dispCastTime_.below25msTimes,
356             "BELOW50MS", dispCastTime_.below50msTimes,
357             "ABOVE50MS", dispCastTime_.above50msTimes,
358             "MSG", "The costing time to dispatch event");
359         if (ret != 0) {
360             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
361         } else {
362             dispCastTime_.sampleCount = 0;
363             dispCastTime_.totalTimes = 0;
364             dispCastTime_.below10msTimes = 0;
365             dispCastTime_.below25msTimes = 0;
366             dispCastTime_.below50msTimes = 0;
367             dispCastTime_.above50msTimes = 0;
368         }
369     }
370 }
371 
CalcComboStartTimes(const int32_t keyDownDuration)372 void DfxHisysevent::CalcComboStartTimes(const int32_t keyDownDuration)
373 {
374     int64_t endTime = GetSysClockTime();
375     comboStartCastTime_.totalTimes++;
376     int64_t castTime = (endTime - comboStartTime_) / CONVERSION_US_TO_MS - keyDownDuration;
377     if (castTime <= TIMES_LEVEL1) {
378         comboStartCastTime_.below10msTimes++;
379     } else if (castTime <= TIMES_LEVEL3) {
380         comboStartCastTime_.below30msTimes++;
381     } else if (castTime <= TIMES_LEVEL4) {
382         comboStartCastTime_.below50msTimes++;
383     } else {
384         comboStartCastTime_.above50msTimes++;
385     }
386 }
387 
ReportComboStartTimes()388 void DfxHisysevent::ReportComboStartTimes()
389 {
390     if (comboStartCastTime_.totalTimes >= REPORT_COMBO_START_TIMES) {
391         int32_t ret = HiSysEventWrite(
392             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
393             "COMBO_START_TIME",
394             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
395             "BELOW10MS", comboStartCastTime_.below10msTimes,
396             "BELOW30MS", comboStartCastTime_.below30msTimes,
397             "BELOW50MS", comboStartCastTime_.below50msTimes,
398             "ABOVE50MS", comboStartCastTime_.above50msTimes,
399             "MSG", "The costing time to launch application of combination");
400         if (ret != 0) {
401             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
402         } else {
403             comboStartCastTime_.totalTimes = 0;
404             comboStartCastTime_.below10msTimes = 0;
405             comboStartCastTime_.below30msTimes = 0;
406             comboStartCastTime_.below50msTimes = 0;
407             comboStartCastTime_.above50msTimes = 0;
408         }
409     }
410 }
411 
ReportPowerInfo(std::shared_ptr<KeyEvent> key,OHOS::HiviewDFX::HiSysEvent::EventType type)412 void DfxHisysevent::ReportPowerInfo(std::shared_ptr<KeyEvent> key, OHOS::HiviewDFX::HiSysEvent::EventType type)
413 {
414     if (key == nullptr) {
415         MMI_HILOGE("get key is failed");
416         return;
417     }
418     if (key->GetKeyAction() == KeyEvent::KEY_ACTION_UP) {
419         int32_t ret = HiSysEventWrite(
420             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
421             "INPUT_POWER_UP",
422             type);
423         if (ret != RET_OK) {
424             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
425         }
426     } else if (key->GetKeyAction() == KeyEvent::KEY_ACTION_DOWN) {
427         int32_t ret = HiSysEventWrite(
428             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
429             "INPUT_POWER_DOWN",
430             type);
431         if (ret != RET_OK) {
432             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
433         }
434     } else {
435         MMI_HILOGW("press power key is error");
436     }
437 }
438 
StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)439 void DfxHisysevent::StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)
440 {
441     CHKPV(pointerEvent);
442     int32_t pointerAction = pointerEvent->GetPointerAction();
443     int32_t fingerCount = pointerEvent->GetFingerCount();
444 
445     if (pointerAction == PointerEvent::POINTER_ACTION_AXIS_BEGIN) {
446         int32_t ret = HiSysEventWrite(
447             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
448             "TOUCHPAD_PINCH",
449             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
450             "FINGER_COUNT", fingerCount);
451         if (ret != RET_OK) {
452             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
453         }
454     } else if (pointerAction == PointerEvent::POINTER_ACTION_SWIPE_BEGIN) {
455         int32_t ret = HiSysEventWrite(
456             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
457             "TOUCHPAD_SWIPE",
458             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
459             "FINGER_COUNT", fingerCount);
460         if (ret != RET_OK) {
461             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
462         }
463     } else {
464         MMI_HILOGW("HiviewDFX Statistic touchpad gesture is error, pointer action is invalid.");
465     }
466 }
467 
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,bool flag)468 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, bool flag)
469 {
470     const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
471         { TOUCHPAD_SCROLL_SETTING, "TOUCHPAD_SCROLL_SETTING" },
472         { TOUCHPAD_SCROLL_DIR_SETTING, "TOUCHPAD_SCROLL_DIR_SETTING" },
473         { TOUCHPAD_TAP_SETTING, "TOUCHPAD_TAP_SETTING" },
474         { TOUCHPAD_SWIPE_SETTING, "TOUCHPAD_SWIPE_SETTING" },
475         { TOUCHPAD_PINCH_SETTING, "TOUCHPAD_PINCH_SETTING" },
476     };
477 
478     auto it = mapSettingCodeToSettingType.find(settingCode);
479     if (it == mapSettingCodeToSettingType.end()) {
480         MMI_HILOGE("HiviewDFX Report touchpad setting state is error, setting code is invalid.");
481         return;
482     }
483     std::string name = it->second;
484 
485     int32_t ret = HiSysEventWrite(
486         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
487         name,
488         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
489         "SWITCH_STATE", flag);
490     if (ret != RET_OK) {
491         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
492     }
493 }
494 
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,int32_t value)495 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, int32_t value)
496 {
497     const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
498         { TOUCHPAD_POINTER_SPEED_SETTING, "TOUCHPAD_POINTER_SPEED_SETTING" },
499         { TOUCHPAD_RIGHT_CLICK_SETTING, "TOUCHPAD_RIGHT_CLICK_SETTING" },
500     };
501 
502     auto it = mapSettingCodeToSettingType.find(settingCode);
503     if (it == mapSettingCodeToSettingType.end()) {
504         MMI_HILOGW("HiviewDFX Report touchpad setting state is error, setting code is invalid.");
505         return;
506     }
507     std::string name = it->second;
508 
509     int32_t ret = HiSysEventWrite(
510         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
511         name,
512         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
513         "SWITCH_VALUE", value);
514     if (ret != RET_OK) {
515         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
516     }
517 }
518 
519 }
520 }
521 
522