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