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 };
514
515 auto it = mapSettingCodeToSettingType.find(settingCode);
516 if (it == mapSettingCodeToSettingType.end()) {
517 MMI_HILOGE("HiviewDFX Report touchpad setting state is error, setting code is invalid");
518 return;
519 }
520 std::string name = it->second;
521
522 int32_t ret = HiSysEventWrite(
523 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
524 name,
525 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
526 "SWITCH_STATE", flag);
527 if (ret != RET_OK) {
528 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
529 }
530 }
531
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,int32_t value)532 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, int32_t value)
533 {
534 const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
535 { TOUCHPAD_POINTER_SPEED_SETTING, "TOUCHPAD_POINTER_SPEED_SETTING" },
536 { TOUCHPAD_RIGHT_CLICK_SETTING, "TOUCHPAD_RIGHT_CLICK_SETTING" },
537 };
538
539 auto it = mapSettingCodeToSettingType.find(settingCode);
540 if (it == mapSettingCodeToSettingType.end()) {
541 MMI_HILOGW("HiviewDFX Report touchpad setting state is error, setting code is invalid");
542 return;
543 }
544 std::string name = it->second;
545
546 int32_t ret = HiSysEventWrite(
547 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
548 name,
549 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
550 "SWITCH_VALUE", value);
551 if (ret != RET_OK) {
552 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
553 }
554 }
555
ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime,int32_t distanceInterval)556 void DfxHisysevent::ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime, int32_t distanceInterval)
557 {
558 int32_t ret = HiSysEventWrite(
559 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
560 "FINGERSENSE_KNOCK_EVENT_INFO",
561 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
562 "SK_S_T", FINGERSENSE_EVENT_TIMES,
563 "SKS_T_I", intervalTime / CONVERSION_US_TO_MS,
564 "DKS_D_I", distanceInterval,
565 "TP_INFO", GetTpVendorName(),
566 "S_INFO", GetAccVendorName(),
567 "LCD_INFO", GetLcdInfo());
568 if (ret != RET_OK) {
569 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
570 }
571 }
572
ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent,int32_t intervalTime)573 void DfxHisysevent::ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent, int32_t intervalTime)
574 {
575 if (intervalTime >= DOWN_TO_PREV_UP_MAX_TIME_THRESHOLD) {
576 return;
577 }
578 CHKPV(touchEvent);
579 size_t size = touchEvent->GetPointerIds().size();
580 std::string knuckleFailCount;
581 std::string invalidTimeFailCount;
582 if (size == SINGLE_KNUCKLE_SIZE) {
583 knuckleFailCount = "SKF_T_I";
584 invalidTimeFailCount = "SK_F_T";
585 } else if (size == DOUBLE_KNUCKLE_SIZE) {
586 knuckleFailCount = "DKF_T_I";
587 invalidTimeFailCount = "DK_F_T";
588 } else {
589 MMI_HILOGE("HiviewDFX Report knuckle state error, knuckle size:%{public}zu", size);
590 return;
591 }
592 int32_t ret = HiSysEventWrite(
593 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
594 "FINGERSENSE_KNOCK_EVENT_INFO",
595 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
596 "FSF_T_C", FINGERSENSE_EVENT_TIMES,
597 knuckleFailCount, intervalTime / CONVERSION_US_TO_MS,
598 invalidTimeFailCount, FINGERSENSE_EVENT_TIMES,
599 "TP_INFO", GetTpVendorName(),
600 "S_INFO", GetAccVendorName(),
601 "LCD_INFO", GetLcdInfo());
602 if (ret != RET_OK) {
603 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
604 }
605 }
606
ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent,float distance)607 void DfxHisysevent::ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent, float distance)
608 {
609 CHKPV(touchEvent);
610 int32_t ret = HiSysEventWrite(
611 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
612 "FINGERSENSE_KNOCK_EVENT_INFO",
613 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
614 "SK_F_T", FINGERSENSE_EVENT_TIMES,
615 "DKF_D_I", distance,
616 "FSF_D_C", FINGERSENSE_EVENT_TIMES,
617 "TP_INFO", GetTpVendorName(),
618 "S_INFO", GetAccVendorName(),
619 "LCD_INFO", GetLcdInfo());
620 if (ret != RET_OK) {
621 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
622 }
623 }
624
ReportKnuckleClickEvent()625 void DfxHisysevent::ReportKnuckleClickEvent()
626 {
627 int32_t ret = HiSysEventWrite(
628 OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
629 "KNUCKLE_CLICK",
630 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
631 "PNAMEID", EMPTY_STRING,
632 "PVERSIONID", EMPTY_STRING);
633 if (ret != RET_OK) {
634 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
635 }
636 }
637
ReportScreenCaptureGesture()638 void DfxHisysevent::ReportScreenCaptureGesture()
639 {
640 int32_t ret = HiSysEventWrite(
641 OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
642 "SINGLE_KNUCKLE_DOUBLE_CLICK",
643 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
644 "PNAMEID", EMPTY_STRING,
645 "PVERSIONID", EMPTY_STRING);
646 if (ret != RET_OK) {
647 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
648 }
649 }
650
651 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
ReportMagicCursorColorChange(std::string fill_Color,std::string stroke_Color)652 void DfxHisysevent::ReportMagicCursorColorChange(std::string fill_Color, std::string stroke_Color)
653 {
654 int32_t ret = HiSysEventWrite(
655 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
656 "MAGIC_CURSOR_COLOR",
657 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
658 "FILL_COLOR", fill_Color,
659 "STROKE_COLOR", stroke_Color);
660 if (ret != RET_OK) {
661 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
662 }
663 }
664
ReportMagicCursorShapeChange(std::string fill_Code,OHOS::MMI::MOUSE_ICON mouse_Style)665 void DfxHisysevent::ReportMagicCursorShapeChange(std::string fill_Code, OHOS::MMI::MOUSE_ICON mouse_Style)
666 {
667 int32_t ret = HiSysEventWrite(
668 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
669 "MAGIC_CURSOR_SHAPE",
670 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
671 "MOUSE_STYLE", mouse_Style,
672 "FILL_CODE", fill_Code);
673 if (ret != RET_OK) {
674 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
675 }
676 }
677
ReportMagicCursorSizeChange(std::string fill_Code,std::string mouse_Size)678 void DfxHisysevent::ReportMagicCursorSizeChange(std::string fill_Code, std::string mouse_Size)
679 {
680 int32_t ret = HiSysEventWrite(
681 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
682 "MAGIC_CURSOR_SIZE",
683 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
684 "MOUSE_SIZE", mouse_Size,
685 "FILL_CODE", fill_Code);
686 if (ret != RET_OK) {
687 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
688 }
689 }
690
ReportMagicCursorFault(std::string error_Code,std::string error_Name)691 void DfxHisysevent::ReportMagicCursorFault(std::string error_Code, std::string error_Name)
692 {
693 int32_t ret = HiSysEventWrite(
694 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
695 "FANTASY_CURSOR_FAILED",
696 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
697 "ERROR_CODE", error_Code,
698 "ERROR_NAME", error_Name);
699 if (ret != RET_OK) {
700 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
701 }
702 }
703 #endif // OHOS_BUILD_ENABLE_MAGICCURSOR
704
ReportSmartShotSuccTimes()705 void DfxHisysevent::ReportSmartShotSuccTimes()
706 {
707 int32_t ret = HiSysEventWrite(
708 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
709 "FINGERSENSE_KNOCK_EVENT_INFO",
710 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
711 "RG_S_T", FINGERSENSE_EVENT_TIMES,
712 "TP_INFO", GetTpVendorName(),
713 "S_INFO", GetAccVendorName(),
714 "LCD_INFO", GetLcdInfo());
715 if (ret != RET_OK) {
716 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
717 }
718 }
719
ReportKnuckleGestureTrackLength(int32_t knuckleGestureTrackLength)720 void DfxHisysevent::ReportKnuckleGestureTrackLength(int32_t knuckleGestureTrackLength)
721 {
722 int32_t ret = HiSysEventWrite(
723 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
724 "FINGERSENSE_KNOCK_EVENT_INFO",
725 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
726 "RG_TRACK_LENGTH", knuckleGestureTrackLength,
727 "TP_INFO", GetTpVendorName(),
728 "S_INFO", GetAccVendorName(),
729 "LCD_INFO", GetLcdInfo());
730 if (ret != RET_OK) {
731 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
732 }
733 }
734
ReportKnuckleGestureTrackTime(const std::vector<int64_t> & gestureTimeStamps)735 void DfxHisysevent::ReportKnuckleGestureTrackTime(const std::vector<int64_t> &gestureTimeStamps)
736 {
737 size_t size = gestureTimeStamps.size();
738 if (size < MIN_GESTURE_TIMESTAMPS_SIZE) {
739 MMI_HILOGE("HiviewDFX Report knuckle gesture track time error, knuckle timestamps size:%{public}zu", size);
740 return;
741 }
742 int32_t knuckleGestureTrackTime = (gestureTimeStamps[size - 1] - gestureTimeStamps[0]) / CONVERSION_US_TO_MS;
743 int32_t ret = HiSysEventWrite(
744 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
745 "FINGERSENSE_KNOCK_EVENT_INFO",
746 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
747 "RG_TRACK_TIME", knuckleGestureTrackTime,
748 "TP_INFO", GetTpVendorName(),
749 "S_INFO", GetAccVendorName(),
750 "LCD_INFO", GetLcdInfo());
751 if (ret != RET_OK) {
752 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
753 }
754 }
755
ReportScreenRecorderGesture(int32_t intervalTime)756 void DfxHisysevent::ReportScreenRecorderGesture(int32_t intervalTime)
757 {
758 int32_t ret = HiSysEventWrite(
759 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
760 "FINGERSENSE_KNOCK_EVENT_INFO",
761 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
762 "DK_S_T", FINGERSENSE_EVENT_TIMES,
763 "DKS_T_I", intervalTime / CONVERSION_US_TO_MS,
764 "TP_INFO", GetTpVendorName(),
765 "S_INFO", GetAccVendorName(),
766 "LCD_INFO", GetLcdInfo());
767 if (ret != RET_OK) {
768 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
769 }
770 }
771
ReportKnuckleGestureFaildTimes()772 void DfxHisysevent::ReportKnuckleGestureFaildTimes()
773 {
774 int32_t ret = HiSysEventWrite(
775 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
776 "FINGERSENSE_KNOCK_EVENT_INFO",
777 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
778 "LG_F_T", FINGERSENSE_EVENT_TIMES,
779 "TP_INFO", GetTpVendorName(),
780 "S_INFO", GetAccVendorName(),
781 "LCD_INFO", GetLcdInfo());
782 if (ret != RET_OK) {
783 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
784 }
785 }
786
ReportKnuckleDrawSSuccessTimes()787 void DfxHisysevent::ReportKnuckleDrawSSuccessTimes()
788 {
789 int32_t ret = HiSysEventWrite(
790 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
791 "FINGERSENSE_KNOCK_EVENT_INFO",
792 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
793 "L_S_S_T", FINGERSENSE_EVENT_TIMES,
794 "TP_INFO", GetTpVendorName(),
795 "S_INFO", GetAccVendorName(),
796 "LCD_INFO", GetLcdInfo());
797 if (ret != RET_OK) {
798 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
799 }
800 }
801
ReportKnuckleGestureFromFailToSuccessTime(int32_t intervalTime)802 void DfxHisysevent::ReportKnuckleGestureFromFailToSuccessTime(int32_t intervalTime)
803 {
804 intervalTime /= CONVERSION_US_TO_MS;
805 if (intervalTime < 0 || intervalTime >= FAIL_SUCC_TIME_DIFF) {
806 return;
807 }
808 int32_t ret = HiSysEventWrite(
809 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
810 "FINGERSENSE_KNOCK_EVENT_INFO",
811 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
812 "RG_F_S_TIME_DIFF", intervalTime,
813 "TP_INFO", GetTpVendorName(),
814 "S_INFO", GetAccVendorName(),
815 "LCD_INFO", GetLcdInfo());
816 if (ret != RET_OK) {
817 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
818 }
819 }
820
ReportKnuckleGestureFromSuccessToFailTime(int32_t intervalTime)821 void DfxHisysevent::ReportKnuckleGestureFromSuccessToFailTime(int32_t intervalTime)
822 {
823 intervalTime /= CONVERSION_US_TO_MS;
824 if (intervalTime < 0 || intervalTime >= FAIL_SUCC_TIME_DIFF) {
825 return;
826 }
827 int32_t ret = HiSysEventWrite(
828 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
829 "FINGERSENSE_KNOCK_EVENT_INFO",
830 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
831 "RG_S_F_TIME_DIFF", intervalTime,
832 "TP_INFO", GetTpVendorName(),
833 "S_INFO", GetAccVendorName(),
834 "LCD_INFO", GetLcdInfo());
835 if (ret != RET_OK) {
836 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
837 }
838 }
839
ReportFailIfKnockTooFast()840 void DfxHisysevent::ReportFailIfKnockTooFast()
841 {
842 int32_t ret = HiSysEventWrite(
843 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
844 "FINGERSENSE_KNOCK_EVENT_INFO",
845 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
846 "SK_F_T", FINGERSENSE_EVENT_TIMES,
847 "FSF_C_C", FINGERSENSE_EVENT_TIMES,
848 "TP_INFO", GetTpVendorName(),
849 "S_INFO", GetAccVendorName(),
850 "LCD_INFO", GetLcdInfo());
851 if (ret != RET_OK) {
852 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
853 }
854 }
855
ReportFailIfOneSuccTwoFail(std::shared_ptr<PointerEvent> touchEvent)856 void DfxHisysevent::ReportFailIfOneSuccTwoFail(std::shared_ptr<PointerEvent> touchEvent)
857 {
858 CHKPV(touchEvent);
859 int32_t id = touchEvent->GetPointerId();
860 PointerEvent::PointerItem item;
861 touchEvent->GetPointerItem(id, item);
862 if (item.GetToolType() == PointerEvent::TOOL_TYPE_KNUCKLE) {
863 return;
864 }
865 int32_t ret = HiSysEventWrite(
866 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
867 "FINGERSENSE_KNOCK_EVENT_INFO",
868 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
869 "SK_F_T", FINGERSENSE_EVENT_TIMES,
870 "FSF_1S_2F_C", FINGERSENSE_EVENT_TIMES,
871 "TP_INFO", GetTpVendorName(),
872 "S_INFO", GetAccVendorName(),
873 "LCD_INFO", GetLcdInfo());
874 if (ret != RET_OK) {
875 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
876 }
877 }
878
GetTpVendorName()879 std::string DfxHisysevent::GetTpVendorName()
880 {
881 if (ROTATE_POLICY != FOLDABLE_DEVICE) {
882 return GetVendorInfo(TP_PATH);
883 }
884 auto displayMode = WIN_MGR->GetDisplayMode();
885 if (displayMode == DisplayMode::FULL) {
886 return GetVendorInfo(TP0_PATH);
887 } else if (displayMode == DisplayMode::MAIN) {
888 return GetVendorInfo(TP1_PATH);
889 }
890 return "NA";
891 }
892
GetAccVendorName()893 std::string DfxHisysevent::GetAccVendorName()
894 {
895 if (ROTATE_POLICY != FOLDABLE_DEVICE) {
896 return GetVendorInfo(ACC_PATH);
897 }
898 return GetVendorInfo(ACC0_PATH);
899 }
900
GetLcdInfo()901 std::string DfxHisysevent::GetLcdInfo()
902 {
903 return GetVendorInfo(LCD_PATH);
904 }
905 } // namespace MMI
906 } // namespace OHOS