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 }