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 uint32_t REPORT_DISPATCH_TIMES { 100 };
32 constexpr uint32_t REPORT_COMBO_START_TIMES { 100 };
33 constexpr uint32_t POINTER_CLEAR_TIMES { 10 };
34 constexpr int32_t CONVERSION_US_TO_MS { 1000 };
35 constexpr int32_t TIMES_LEVEL1 { 10 };
36 constexpr int32_t TIMES_LEVEL2 { 25 };
37 constexpr int32_t TIMES_LEVEL3 { 30 };
38 constexpr int32_t TIMES_LEVEL4 { 50 };
39 constexpr int32_t FINGERSENSE_EVENT_TIMES { 1 };
40 constexpr size_t SINGLE_KNUCKLE_SIZE { 1 };
41 constexpr size_t DOUBLE_KNUCKLE_SIZE { 2 };
42 constexpr int32_t FAIL_SUCC_TIME_DIFF { 3 * 60 * 1000 };
43 constexpr int32_t MIN_GESTURE_TIMESTAMPS_SIZE { 2 };
44 constexpr int32_t DOWN_TO_PREV_UP_MAX_TIME_THRESHOLD { 1000 * 1000 };
45 constexpr int32_t FOLDABLE_DEVICE { 2 };
46 constexpr int32_t REPORT_MAX_KEY_EVENT_TIMES { 1000 };
47 const int32_t ROTATE_POLICY = system::GetIntParameter("const.window.device.rotate_policy", 0);
48 const std::string EMPTY_STRING { "" };
49 const char* LCD_PATH { "/sys/class/graphics/fb0/lcd_model" };
50 const char* ACC_PATH { "/sys/devices/platform/_sensor/acc_info" };
51 const char* ACC0_PATH { "/sys/class/sensors/acc_sensor/info" };
52 const char* TP_PATH { "/sys/touchscreen/touch_chip_info" };
53 const char* TP0_PATH { "/sys/touchscreen0/touch_chip_info" };
54 const char* TP1_PATH { "/sys/touchscreen1/touch_chip_info" };
55 const std::string NAME_DISPATCH { "dispatch" };
56 const std::string NAME_FILTER { "filter" };
57 const std::string NAME_INTERCEPT { "intercept" };
58 const std::string NAME_SUBCRIBER { "subcriber" };
59 const std::string NAME_FINGERPRINT { "fingerprint" };
60 const std::string NAME_STYLUS { "stylus" };
61 const std::string AIBASE_BUNDLE_NAME { "com.hmos.aibase" };
62 const std::string SCREENSHOT_BUNDLE_NAME { "com.hmos.screenshot" };
63 const std::string SCREENRECORDER_BUNDLE_NAME { "com.hmos.screenrecorder" };
64 const std::string WALLET_BUNDLE_NAME { "com.hmos.walletservice" };
65 const std::string SOS_BUNDLE_NAME { "com.hmos.emergencycommunication" };
66 const std::string NAME_CANCEL { "cancel" };
67 const std::string TOUCH_SCREEN_ON { "screen on" };
68 } // namespace
69
GetVendorInfo(const char * nodePath)70 static std::string GetVendorInfo(const char* nodePath)
71 {
72 char realPath[PATH_MAX] = {};
73 if (realpath(nodePath, realPath) == nullptr) {
74 MMI_HILOGE("The realpath return nullptr");
75 return "";
76 }
77 std::ifstream file(realPath);
78 if (!file.is_open()) {
79 MMI_HILOGE("Unable to open file:%{public}s, error:%{public}d", nodePath, errno);
80 return "";
81 }
82 std::string vendorInfo;
83 file >> vendorInfo;
84 file.close();
85 return vendorInfo;
86 }
87
OnClientConnect(const ClientConnectData & data,OHOS::HiviewDFX::HiSysEvent::EventType type)88 void DfxHisysevent::OnClientConnect(const ClientConnectData &data, OHOS::HiviewDFX::HiSysEvent::EventType type)
89 {
90 if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
91 int32_t ret = HiSysEventWrite(
92 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
93 "CLIENT_CONNECTION_SUCCESS",
94 type,
95 "PID", data.pid,
96 "UID", data.uid,
97 "MODULE_TYPE", data.moduleType,
98 "SERVER_FD", data.serverFd,
99 "PROGRAMNAME", data.programName,
100 "MSG", "The client successfully connected to the server");
101 if (ret != 0) {
102 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
103 }
104 } else {
105 int32_t ret = HiSysEventWrite(
106 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
107 "CLIENT_CONNECTION_FAILURE",
108 type,
109 "PID", data.pid,
110 "UID", data.uid,
111 "MODULE_TYPE", data.moduleType,
112 "PROGRAMNAME", data.programName,
113 "MSG", "The client failed to connect to the server");
114 if (ret != 0) {
115 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
116 }
117 }
118 }
119
OnClientDisconnect(const SessionPtr & secPtr,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)120 void DfxHisysevent::OnClientDisconnect(const SessionPtr& secPtr, int32_t fd,
121 OHOS::HiviewDFX::HiSysEvent::EventType type)
122 {
123 CHKPV(secPtr);
124 if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
125 int32_t ret = HiSysEventWrite(
126 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
127 "CLIENT_DISCONNECTION_SUCCESS",
128 type,
129 "PID", secPtr->GetPid(),
130 "UID", secPtr->GetUid(),
131 "MODULE_TYPE", secPtr->GetModuleType(),
132 "FD", fd,
133 "PROGRAMNAME", secPtr->GetProgramName(),
134 "MSG", "The client successfully disconnected to the server");
135 if (ret != 0) {
136 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
137 }
138 } else {
139 if (secPtr == nullptr) {
140 int32_t ret = HiSysEventWrite(
141 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
142 "CLIENT_DISCONNECTION_FAILURE",
143 type,
144 "MSG", "The client failed to disconnect to the server because secPtr is nullptr");
145 if (ret != 0) {
146 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
147 }
148 } else {
149 int32_t ret = HiSysEventWrite(
150 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
151 "CLIENT_DISCONNECTION_FAILURE",
152 type,
153 "MSG", "The client failed to disconnect to the server because close(fd) return error");
154 if (ret != 0) {
155 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
156 }
157 }
158 }
159 }
160
OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)161 void DfxHisysevent::OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer, int32_t fd,
162 OHOS::HiviewDFX::HiSysEvent::EventType type)
163 {
164 CHKPV(pointer);
165 if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
166 int32_t ret = HiSysEventWrite(
167 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
168 "TARGET_POINTER_EVENT_SUCCESS",
169 type,
170 "EVENTTYPE", pointer->GetEventType(),
171 "AGENT_WINDOWID", pointer->GetAgentWindowId(),
172 "TARGET_WINDOWID", pointer->GetTargetWindowId(),
173 "PID", WIN_MGR->GetWindowPid(pointer->GetTargetWindowId()),
174 "FD", fd,
175 "MSG", "The window manager successfully update target pointer");
176 if (ret != 0) {
177 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
178 }
179 } else {
180 int32_t ret = HiSysEventWrite(
181 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
182 "TARGET_POINTER_EVENT_FAILURE",
183 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
184 "EVENTTYPE", pointer->GetEventType(),
185 "MSG", "The window manager failed to update target pointer");
186 if (ret != 0) {
187 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
188 }
189 }
190 }
191
OnUpdateTargetKey(std::shared_ptr<KeyEvent> key,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)192 void DfxHisysevent::OnUpdateTargetKey(std::shared_ptr<KeyEvent> key, int32_t fd,
193 OHOS::HiviewDFX::HiSysEvent::EventType type)
194 {
195 CHKPV(key);
196 if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
197 int32_t ret = HiSysEventWrite(
198 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
199 "TARGET_KEY_EVENT_SUCCESS",
200 type,
201 "EVENTTYPE", key->GetEventType(),
202 "KEYCODE", key->GetKeyCode(),
203 "ACTION", key->GetAction(),
204 "ACTION_TIME", key->GetActionTime(),
205 "ACTION_STARTTIME", key->GetActionStartTime(),
206 "FLAG", key->GetFlag(),
207 "KEYACTION", key->GetKeyAction(),
208 "FD", fd,
209 "AGENT_WINDOWID", key->GetAgentWindowId(),
210 "TARGET_WINDOWID", key->GetTargetWindowId(),
211 "PID", WIN_MGR->GetWindowPid(key->GetTargetWindowId()),
212 "MSG", "The window manager successfully update target key");
213 if (ret != 0) {
214 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
215 }
216 } else {
217 int32_t ret = HiSysEventWrite(
218 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
219 "TARGET_KEY_EVENT_FAILURE",
220 type,
221 "EVENTTYPE", key->GetEventType(),
222 "KEYCODE", key->GetKeyCode(),
223 "ACTION", key->GetAction(),
224 "ACTION_TIME", key->GetActionTime(),
225 "ACTION_STARTTIME", key->GetActionStartTime(),
226 "FLAG", key->GetFlag(),
227 "KEYACTION", key->GetKeyAction(),
228 "MSG", "The window manager failed to update target key");
229 if (ret != 0) {
230 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
231 }
232 }
233 }
234
OnFocusWindowChanged(int32_t oldFocusWindowId,int32_t newFocusWindowId,int32_t oldFocusWindowPid,int32_t newFocusWindowPid)235 void DfxHisysevent::OnFocusWindowChanged(int32_t oldFocusWindowId, int32_t newFocusWindowId,
236 int32_t oldFocusWindowPid, int32_t newFocusWindowPid)
237 {
238 int32_t ret = HiSysEventWrite(
239 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
240 "FOCUS_WINDOW_CHANGE",
241 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
242 "OLD_FOCUS_WINDOWID", oldFocusWindowId,
243 "NEW_FOCUS_WINDOWID", newFocusWindowId,
244 "OLD_FOCUS_WINDOWPID", oldFocusWindowPid,
245 "NEW_FOCUS_WINDOWPID", newFocusWindowPid,
246 "MSG", "The focusWindowId changing succeeded");
247 if (ret != 0) {
248 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
249 }
250 }
251
OnZorderWindowChanged(int32_t oldZorderFirstWindowId,int32_t newZorderFirstWindowId,int32_t oldZorderFirstWindowPid,int32_t newZorderFirstWindowPid)252 void DfxHisysevent::OnZorderWindowChanged(int32_t oldZorderFirstWindowId, int32_t newZorderFirstWindowId,
253 int32_t oldZorderFirstWindowPid, int32_t newZorderFirstWindowPid)
254 {
255 int32_t ret = HiSysEventWrite(
256 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
257 "Z_ORDER_WINDOW_CHANGE",
258 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
259 "OLD_ZORDER_FIRST_WINDOWID", oldZorderFirstWindowId,
260 "NEW_ZORDER_FIRST_WINDOWID", newZorderFirstWindowId,
261 "OLD_ZORDER_FIRST_WINDOWPID", oldZorderFirstWindowPid,
262 "NEW_ZORDER_FIRST_WINDOWPID", newZorderFirstWindowPid,
263 "MSG", "The ZorderFirstWindow changing succeeded");
264 if (ret != 0) {
265 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
266 }
267 }
268
OnLidSwitchChanged(int32_t lidSwitch)269 void DfxHisysevent::OnLidSwitchChanged(int32_t lidSwitch)
270 {
271 int32_t ret = HiSysEventWrite(
272 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
273 "LID_SWITCH",
274 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
275 "SWITCH", lidSwitch);
276 if (ret != 0) {
277 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
278 }
279 }
280
ApplicationBlockInput(const SessionPtr & sess)281 void DfxHisysevent::ApplicationBlockInput(const SessionPtr& sess)
282 {
283 int32_t ret = HiSysEventWrite(
284 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
285 "APPLICATION_BLOCK_INPUT",
286 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
287 "PID", sess->GetPid(),
288 "UID", sess->GetUid(),
289 "PACKAGE_NAME", sess->GetProgramName(),
290 "PROCESS_NAME", sess->GetProgramName(),
291 "MSG", "User input does not respond");
292 if (ret != 0) {
293 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
294 }
295 }
296
CalcKeyDispTimes()297 void DfxHisysevent::CalcKeyDispTimes()
298 {
299 int64_t endTime = GetSysClockTime();
300 dispCastTime_.totalTimes++;
301 int64_t castTime = (endTime - dispatchStartTime_) / CONVERSION_US_TO_MS;
302 if (castTime <= TIMES_LEVEL1) {
303 dispCastTime_.below10msTimes++;
304 } else if (castTime <= TIMES_LEVEL2) {
305 dispCastTime_.below25msTimes++;
306 } else if (castTime <= TIMES_LEVEL4) {
307 dispCastTime_.below50msTimes++;
308 } else {
309 dispCastTime_.above50msTimes++;
310 }
311 }
312
CalcPointerDispTimes()313 void DfxHisysevent::CalcPointerDispTimes()
314 {
315 int64_t endTime = GetSysClockTime();
316 dispCastTime_.sampleCount++;
317 int64_t castTime = (endTime - dispatchStartTime_) / CONVERSION_US_TO_MS;
318 if (dispCastTime_.sampleCount == POINTER_CLEAR_TIMES) {
319 dispCastTime_.sampleCount = 0;
320 dispCastTime_.totalTimes++;
321 if (castTime <= TIMES_LEVEL1) {
322 dispCastTime_.below10msTimes++;
323 } else if (castTime <= TIMES_LEVEL2) {
324 dispCastTime_.below25msTimes++;
325 } else if (castTime <= TIMES_LEVEL4) {
326 dispCastTime_.below50msTimes++;
327 } else {
328 dispCastTime_.above50msTimes++;
329 }
330 }
331 }
332
ReportDispTimes()333 void DfxHisysevent::ReportDispTimes()
334 {
335 if (dispCastTime_.totalTimes >= REPORT_DISPATCH_TIMES) {
336 int32_t ret = HiSysEventWrite(
337 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
338 "INPUT_DISPATCH_TIME",
339 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
340 "BELOW10MS", dispCastTime_.below10msTimes,
341 "BELOW25MS", dispCastTime_.below25msTimes,
342 "BELOW50MS", dispCastTime_.below50msTimes,
343 "ABOVE50MS", dispCastTime_.above50msTimes,
344 "MSG", "The costing time to dispatch event");
345 if (ret != 0) {
346 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
347 } else {
348 dispCastTime_.sampleCount = 0;
349 dispCastTime_.totalTimes = 0;
350 dispCastTime_.below10msTimes = 0;
351 dispCastTime_.below25msTimes = 0;
352 dispCastTime_.below50msTimes = 0;
353 dispCastTime_.above50msTimes = 0;
354 }
355 }
356 }
357
CalcComboStartTimes(const int32_t keyDownDuration)358 void DfxHisysevent::CalcComboStartTimes(const int32_t keyDownDuration)
359 {
360 int64_t endTime = GetSysClockTime();
361 comboStartCastTime_.totalTimes++;
362 int64_t castTime = (endTime - comboStartTime_) / CONVERSION_US_TO_MS - keyDownDuration;
363 if (castTime <= TIMES_LEVEL1) {
364 comboStartCastTime_.below10msTimes++;
365 } else if (castTime <= TIMES_LEVEL3) {
366 comboStartCastTime_.below30msTimes++;
367 } else if (castTime <= TIMES_LEVEL4) {
368 comboStartCastTime_.below50msTimes++;
369 } else {
370 comboStartCastTime_.above50msTimes++;
371 }
372 }
373
ReportComboStartTimes()374 void DfxHisysevent::ReportComboStartTimes()
375 {
376 if (comboStartCastTime_.totalTimes >= REPORT_COMBO_START_TIMES) {
377 int32_t ret = HiSysEventWrite(
378 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
379 "COMBO_START_TIME",
380 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
381 "BELOW10MS", comboStartCastTime_.below10msTimes,
382 "BELOW30MS", comboStartCastTime_.below30msTimes,
383 "BELOW50MS", comboStartCastTime_.below50msTimes,
384 "ABOVE50MS", comboStartCastTime_.above50msTimes,
385 "MSG", "The costing time to launch application of combination");
386 if (ret != 0) {
387 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
388 } else {
389 comboStartCastTime_.totalTimes = 0;
390 comboStartCastTime_.below10msTimes = 0;
391 comboStartCastTime_.below30msTimes = 0;
392 comboStartCastTime_.below50msTimes = 0;
393 comboStartCastTime_.above50msTimes = 0;
394 }
395 }
396 }
397
ReportPowerInfo(std::shared_ptr<KeyEvent> key,OHOS::HiviewDFX::HiSysEvent::EventType type)398 void DfxHisysevent::ReportPowerInfo(std::shared_ptr<KeyEvent> key, OHOS::HiviewDFX::HiSysEvent::EventType type)
399 {
400 CHKPV(key);
401 if (key->GetKeyAction() == KeyEvent::KEY_ACTION_UP) {
402 int32_t ret = HiSysEventWrite(
403 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
404 "INPUT_POWER_UP",
405 type);
406 if (ret != RET_OK) {
407 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
408 }
409 } else if (key->GetKeyAction() == KeyEvent::KEY_ACTION_DOWN) {
410 int32_t ret = HiSysEventWrite(
411 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
412 "INPUT_POWER_DOWN",
413 type);
414 if (ret != RET_OK) {
415 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
416 }
417 } else {
418 MMI_HILOGW("Press power key is error");
419 }
420 }
421
StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)422 void DfxHisysevent::StatisticTouchpadGesture(std::shared_ptr<PointerEvent> pointerEvent)
423 {
424 CHKPV(pointerEvent);
425 int32_t pointerAction = pointerEvent->GetPointerAction();
426 int32_t fingerCount = pointerEvent->GetFingerCount();
427
428 if (pointerAction == PointerEvent::POINTER_ACTION_AXIS_BEGIN) {
429 int32_t ret = HiSysEventWrite(
430 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
431 "TOUCHPAD_PINCH",
432 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
433 "FINGER_COUNT", fingerCount);
434 if (ret != RET_OK) {
435 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
436 }
437 } else if (pointerAction == PointerEvent::POINTER_ACTION_SWIPE_BEGIN) {
438 int32_t ret = HiSysEventWrite(
439 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
440 "TOUCHPAD_SWIPE",
441 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
442 "FINGER_COUNT", fingerCount);
443 if (ret != RET_OK) {
444 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
445 }
446 } else {
447 MMI_HILOGW("HiviewDFX Statistic touchpad gesture is error, pointer action is invalid");
448 }
449 }
450
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,bool flag)451 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, bool flag)
452 {
453 const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
454 { TOUCHPAD_SCROLL_SETTING, "TOUCHPAD_SCROLL_SETTING" },
455 { TOUCHPAD_SCROLL_DIR_SETTING, "TOUCHPAD_SCROLL_DIR_SETTING" },
456 { TOUCHPAD_TAP_SETTING, "TOUCHPAD_TAP_SETTING" },
457 { TOUCHPAD_SWIPE_SETTING, "TOUCHPAD_SWIPE_SETTING" },
458 { TOUCHPAD_PINCH_SETTING, "TOUCHPAD_PINCH_SETTING" },
459 { TOUCHPAD_DOUBLE_TAP_DRAG_SETTING, "TOUCHPAD_DOUBLE_TAP_DRAG_SETTING" },
460 };
461
462 auto it = mapSettingCodeToSettingType.find(settingCode);
463 if (it == mapSettingCodeToSettingType.end()) {
464 MMI_HILOGE("HiviewDFX Report touchpad setting state is error, setting code is invalid");
465 return;
466 }
467 std::string name = it->second;
468
469 int32_t ret = HiSysEventWrite(
470 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
471 name,
472 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
473 "SWITCH_STATE", flag);
474 if (ret != RET_OK) {
475 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
476 }
477 MMI_HILOGI("HiviewDFX Report touchpad setting code is:%{public}s, setting state is:%{public}s",
478 (it->second).c_str(), flag ? "true" : "false");
479 }
480
ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode,int32_t value)481 void DfxHisysevent::ReportTouchpadSettingState(TOUCHPAD_SETTING_CODE settingCode, int32_t value)
482 {
483 const std::map<uint32_t, std::string> mapSettingCodeToSettingType = {
484 { TOUCHPAD_POINTER_SPEED_SETTING, "TOUCHPAD_POINTER_SPEED_SETTING" },
485 { TOUCHPAD_RIGHT_CLICK_SETTING, "TOUCHPAD_RIGHT_CLICK_SETTING" },
486 };
487
488 auto it = mapSettingCodeToSettingType.find(settingCode);
489 if (it == mapSettingCodeToSettingType.end()) {
490 MMI_HILOGW("HiviewDFX Report touchpad setting state is error, setting code is invalid");
491 return;
492 }
493 std::string name = it->second;
494
495 int32_t ret = HiSysEventWrite(
496 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
497 name,
498 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
499 "SWITCH_VALUE", value);
500 if (ret != RET_OK) {
501 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
502 }
503 MMI_HILOGI("HiviewDFX Report touchpad setting code is:%{public}s, setting state is:%{public}d",
504 (it->second).c_str(), value);
505 }
506
ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime,int32_t distanceInterval)507 void DfxHisysevent::ReportSingleKnuckleDoubleClickEvent(int32_t intervalTime, int32_t distanceInterval)
508 {
509 int32_t ret = HiSysEventWrite(
510 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
511 "FINGERSENSE_KNOCK_EVENT_INFO",
512 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
513 "SK_S_T", FINGERSENSE_EVENT_TIMES,
514 "SKS_T_I", intervalTime / CONVERSION_US_TO_MS,
515 "DKS_D_I", distanceInterval,
516 "TP_INFO", GetTpVendorName(),
517 "S_INFO", GetAccVendorName(),
518 "LCD_INFO", GetLcdInfo());
519 if (ret != RET_OK) {
520 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
521 }
522 }
523
ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent,int32_t intervalTime)524 void DfxHisysevent::ReportFailIfInvalidTime(const std::shared_ptr<PointerEvent> touchEvent, int32_t intervalTime)
525 {
526 if (intervalTime >= DOWN_TO_PREV_UP_MAX_TIME_THRESHOLD) {
527 return;
528 }
529 CHKPV(touchEvent);
530 size_t size = touchEvent->GetPointerIds().size();
531 std::string knuckleFailCount;
532 std::string invalidTimeFailCount;
533 if (size == SINGLE_KNUCKLE_SIZE) {
534 knuckleFailCount = "SKF_T_I";
535 invalidTimeFailCount = "SK_F_T";
536 } else if (size == DOUBLE_KNUCKLE_SIZE) {
537 knuckleFailCount = "DKF_T_I";
538 invalidTimeFailCount = "DK_F_T";
539 } else {
540 MMI_HILOGE("HiviewDFX Report knuckle state error, knuckle size:%{public}zu", size);
541 return;
542 }
543 int32_t ret = HiSysEventWrite(
544 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
545 "FINGERSENSE_KNOCK_EVENT_INFO",
546 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
547 "FSF_T_C", FINGERSENSE_EVENT_TIMES,
548 knuckleFailCount, intervalTime / CONVERSION_US_TO_MS,
549 invalidTimeFailCount, FINGERSENSE_EVENT_TIMES,
550 "TP_INFO", GetTpVendorName(),
551 "S_INFO", GetAccVendorName(),
552 "LCD_INFO", GetLcdInfo());
553 if (ret != RET_OK) {
554 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
555 }
556 }
557
ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent,float distance)558 void DfxHisysevent::ReportFailIfInvalidDistance(const std::shared_ptr<PointerEvent> touchEvent, float distance)
559 {
560 CHKPV(touchEvent);
561 int32_t ret = HiSysEventWrite(
562 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
563 "FINGERSENSE_KNOCK_EVENT_INFO",
564 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
565 "SK_F_T", FINGERSENSE_EVENT_TIMES,
566 "DKF_D_I", distance,
567 "FSF_D_C", FINGERSENSE_EVENT_TIMES,
568 "TP_INFO", GetTpVendorName(),
569 "S_INFO", GetAccVendorName(),
570 "LCD_INFO", GetLcdInfo());
571 if (ret != RET_OK) {
572 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
573 }
574 }
575
ReportKnuckleClickEvent()576 void DfxHisysevent::ReportKnuckleClickEvent()
577 {
578 int32_t ret = HiSysEventWrite(
579 OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
580 "KNUCKLE_CLICK",
581 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
582 "PNAMEID", EMPTY_STRING,
583 "PVERSIONID", EMPTY_STRING);
584 if (ret != RET_OK) {
585 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
586 }
587 }
588
ReportScreenCaptureGesture()589 void DfxHisysevent::ReportScreenCaptureGesture()
590 {
591 int32_t ret = HiSysEventWrite(
592 OHOS::HiviewDFX::HiSysEvent::Domain::INPUT_UE,
593 "SINGLE_KNUCKLE_DOUBLE_CLICK",
594 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
595 "PNAMEID", EMPTY_STRING,
596 "PVERSIONID", EMPTY_STRING);
597 if (ret != RET_OK) {
598 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
599 }
600 }
601
602 #ifdef OHOS_BUILD_ENABLE_MAGICCURSOR
ReportMagicCursorColorChange(std::string fill_Color,std::string stroke_Color)603 void DfxHisysevent::ReportMagicCursorColorChange(std::string fill_Color, std::string stroke_Color)
604 {
605 int32_t ret = HiSysEventWrite(
606 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
607 "MAGIC_CURSOR_COLOR",
608 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
609 "FILL_COLOR", fill_Color,
610 "STROKE_COLOR", stroke_Color);
611 if (ret != RET_OK) {
612 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
613 }
614 }
615
ReportMagicCursorShapeChange(std::string fill_Code,OHOS::MMI::MOUSE_ICON mouse_Style)616 void DfxHisysevent::ReportMagicCursorShapeChange(std::string fill_Code, OHOS::MMI::MOUSE_ICON mouse_Style)
617 {
618 int32_t ret = HiSysEventWrite(
619 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
620 "MAGIC_CURSOR_SHAPE",
621 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
622 "MOUSE_STYLE", mouse_Style,
623 "FILL_CODE", fill_Code);
624 if (ret != RET_OK) {
625 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
626 }
627 }
628
ReportMagicCursorSizeChange(std::string fill_Code,std::string mouse_Size)629 void DfxHisysevent::ReportMagicCursorSizeChange(std::string fill_Code, std::string mouse_Size)
630 {
631 int32_t ret = HiSysEventWrite(
632 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
633 "MAGIC_CURSOR_SIZE",
634 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
635 "MOUSE_SIZE", mouse_Size,
636 "FILL_CODE", fill_Code);
637 if (ret != RET_OK) {
638 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
639 }
640 }
641
ReportMagicCursorFault(std::string error_Code,std::string error_Name)642 void DfxHisysevent::ReportMagicCursorFault(std::string error_Code, std::string error_Name)
643 {
644 int32_t ret = HiSysEventWrite(
645 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
646 "FANTASY_CURSOR_FAILED",
647 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
648 "ERROR_CODE", error_Code,
649 "ERROR_NAME", error_Name);
650 if (ret != RET_OK) {
651 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
652 }
653 }
654 #endif // OHOS_BUILD_ENABLE_MAGICCURSOR
655
ReportSmartShotSuccTimes()656 void DfxHisysevent::ReportSmartShotSuccTimes()
657 {
658 int32_t ret = HiSysEventWrite(
659 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
660 "FINGERSENSE_KNOCK_EVENT_INFO",
661 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
662 "RG_S_T", FINGERSENSE_EVENT_TIMES,
663 "TP_INFO", GetTpVendorName(),
664 "S_INFO", GetAccVendorName(),
665 "LCD_INFO", GetLcdInfo());
666 if (ret != RET_OK) {
667 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
668 }
669 }
670
ReportKnuckleGestureTrackLength(int32_t knuckleGestureTrackLength)671 void DfxHisysevent::ReportKnuckleGestureTrackLength(int32_t knuckleGestureTrackLength)
672 {
673 int32_t ret = HiSysEventWrite(
674 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
675 "FINGERSENSE_KNOCK_EVENT_INFO",
676 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
677 "RG_TRACK_LENGTH", knuckleGestureTrackLength,
678 "TP_INFO", GetTpVendorName(),
679 "S_INFO", GetAccVendorName(),
680 "LCD_INFO", GetLcdInfo());
681 if (ret != RET_OK) {
682 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
683 }
684 }
685
ReportKnuckleGestureTrackTime(const std::vector<int64_t> & gestureTimeStamps)686 void DfxHisysevent::ReportKnuckleGestureTrackTime(const std::vector<int64_t> &gestureTimeStamps)
687 {
688 size_t size = gestureTimeStamps.size();
689 if (size < MIN_GESTURE_TIMESTAMPS_SIZE) {
690 MMI_HILOGE("HiviewDFX Report knuckle gesture track time error, knuckle timestamps size:%{public}zu", size);
691 return;
692 }
693 int32_t knuckleGestureTrackTime = (gestureTimeStamps[size - 1] - gestureTimeStamps[0]) / CONVERSION_US_TO_MS;
694 int32_t ret = HiSysEventWrite(
695 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
696 "FINGERSENSE_KNOCK_EVENT_INFO",
697 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
698 "RG_TRACK_TIME", knuckleGestureTrackTime,
699 "TP_INFO", GetTpVendorName(),
700 "S_INFO", GetAccVendorName(),
701 "LCD_INFO", GetLcdInfo());
702 if (ret != RET_OK) {
703 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
704 }
705 }
706
ReportScreenRecorderGesture(int32_t intervalTime)707 void DfxHisysevent::ReportScreenRecorderGesture(int32_t intervalTime)
708 {
709 int32_t ret = HiSysEventWrite(
710 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
711 "FINGERSENSE_KNOCK_EVENT_INFO",
712 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
713 "DK_S_T", FINGERSENSE_EVENT_TIMES,
714 "DKS_T_I", intervalTime / CONVERSION_US_TO_MS,
715 "TP_INFO", GetTpVendorName(),
716 "S_INFO", GetAccVendorName(),
717 "LCD_INFO", GetLcdInfo());
718 if (ret != RET_OK) {
719 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
720 }
721 }
722
ReportKnuckleGestureFaildTimes()723 void DfxHisysevent::ReportKnuckleGestureFaildTimes()
724 {
725 int32_t ret = HiSysEventWrite(
726 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
727 "FINGERSENSE_KNOCK_EVENT_INFO",
728 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
729 "LG_F_T", FINGERSENSE_EVENT_TIMES,
730 "TP_INFO", GetTpVendorName(),
731 "S_INFO", GetAccVendorName(),
732 "LCD_INFO", GetLcdInfo());
733 if (ret != RET_OK) {
734 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
735 }
736 }
737
ReportKnuckleDrawSSuccessTimes()738 void DfxHisysevent::ReportKnuckleDrawSSuccessTimes()
739 {
740 int32_t ret = HiSysEventWrite(
741 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
742 "FINGERSENSE_KNOCK_EVENT_INFO",
743 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
744 "L_S_S_T", FINGERSENSE_EVENT_TIMES,
745 "TP_INFO", GetTpVendorName(),
746 "S_INFO", GetAccVendorName(),
747 "LCD_INFO", GetLcdInfo());
748 if (ret != RET_OK) {
749 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
750 }
751 }
752
ReportKnuckleGestureFromFailToSuccessTime(int32_t intervalTime)753 void DfxHisysevent::ReportKnuckleGestureFromFailToSuccessTime(int32_t intervalTime)
754 {
755 intervalTime /= CONVERSION_US_TO_MS;
756 if (intervalTime < 0 || intervalTime >= FAIL_SUCC_TIME_DIFF) {
757 return;
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 "RG_F_S_TIME_DIFF", intervalTime,
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
ReportKnuckleGestureFromSuccessToFailTime(int32_t intervalTime)772 void DfxHisysevent::ReportKnuckleGestureFromSuccessToFailTime(int32_t intervalTime)
773 {
774 intervalTime /= CONVERSION_US_TO_MS;
775 if (intervalTime < 0 || intervalTime >= FAIL_SUCC_TIME_DIFF) {
776 return;
777 }
778 int32_t ret = HiSysEventWrite(
779 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
780 "FINGERSENSE_KNOCK_EVENT_INFO",
781 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
782 "RG_S_F_TIME_DIFF", intervalTime,
783 "TP_INFO", GetTpVendorName(),
784 "S_INFO", GetAccVendorName(),
785 "LCD_INFO", GetLcdInfo());
786 if (ret != RET_OK) {
787 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
788 }
789 }
790
ReportFailIfKnockTooFast()791 void DfxHisysevent::ReportFailIfKnockTooFast()
792 {
793 int32_t ret = HiSysEventWrite(
794 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
795 "FINGERSENSE_KNOCK_EVENT_INFO",
796 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
797 "SK_F_T", FINGERSENSE_EVENT_TIMES,
798 "FSF_C_C", FINGERSENSE_EVENT_TIMES,
799 "TP_INFO", GetTpVendorName(),
800 "S_INFO", GetAccVendorName(),
801 "LCD_INFO", GetLcdInfo());
802 if (ret != RET_OK) {
803 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
804 }
805 }
806
ReportFailIfOneSuccTwoFail(const std::shared_ptr<PointerEvent> touchEvent)807 void DfxHisysevent::ReportFailIfOneSuccTwoFail(const std::shared_ptr<PointerEvent> touchEvent)
808 {
809 CHKPV(touchEvent);
810 int32_t id = touchEvent->GetPointerId();
811 PointerEvent::PointerItem item;
812 touchEvent->GetPointerItem(id, item);
813 if (item.GetToolType() == PointerEvent::TOOL_TYPE_KNUCKLE) {
814 return;
815 }
816 int32_t ret = HiSysEventWrite(
817 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
818 "FINGERSENSE_KNOCK_EVENT_INFO",
819 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
820 "SK_F_T", FINGERSENSE_EVENT_TIMES,
821 "FSF_1S_2F_C", FINGERSENSE_EVENT_TIMES,
822 "TP_INFO", GetTpVendorName(),
823 "S_INFO", GetAccVendorName(),
824 "LCD_INFO", GetLcdInfo());
825 if (ret != RET_OK) {
826 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
827 }
828 }
829
GetTpVendorName()830 std::string DfxHisysevent::GetTpVendorName()
831 {
832 if (ROTATE_POLICY != FOLDABLE_DEVICE) {
833 return GetVendorInfo(TP_PATH);
834 }
835 auto displayMode = WIN_MGR->GetDisplayMode();
836 if (displayMode == DisplayMode::FULL) {
837 return GetVendorInfo(TP0_PATH);
838 } else if (displayMode == DisplayMode::MAIN) {
839 return GetVendorInfo(TP1_PATH);
840 }
841 return "NA";
842 }
843
GetAccVendorName()844 std::string DfxHisysevent::GetAccVendorName()
845 {
846 if (ROTATE_POLICY != FOLDABLE_DEVICE) {
847 return GetVendorInfo(ACC_PATH);
848 }
849 return GetVendorInfo(ACC0_PATH);
850 }
851
GetLcdInfo()852 std::string DfxHisysevent::GetLcdInfo()
853 {
854 return GetVendorInfo(LCD_PATH);
855 }
856
ReportSubscribeKeyEvent(int32_t subscribeId,int32_t finalKey,std::string name,int32_t pid)857 void DfxHisysevent::ReportSubscribeKeyEvent(int32_t subscribeId, int32_t finalKey,
858 std::string name, int32_t pid)
859 {
860 int32_t ret = HiSysEventWrite(
861 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
862 "SUBSCRIBE_KEY_EVENT",
863 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
864 "SUBSCRIBE_ID", subscribeId,
865 "FINAL_KEY", finalKey,
866 "NAME", name,
867 "PID", pid);
868 if (ret != RET_OK) {
869 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
870 }
871 }
872
ReportUnSubscribeKeyEvent(int32_t subscribeId,int32_t finalKey,std::string name,int32_t pid)873 void DfxHisysevent::ReportUnSubscribeKeyEvent(int32_t subscribeId, int32_t finalKey,
874 std::string name, int32_t pid)
875 {
876 int32_t ret = HiSysEventWrite(
877 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
878 "UNSUBSCRIBE_KEY_EVENT",
879 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
880 "SUBSCRIBE_ID", subscribeId,
881 "FINAL_KEY", finalKey,
882 "NAME", name,
883 "PID", pid);
884 if (ret != RET_OK) {
885 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
886 }
887 }
888
ReportKeyboardEvent(int32_t eventType,int32_t keyCode,int32_t keyAction)889 void DfxHisysevent::ReportKeyboardEvent(int32_t eventType, int32_t keyCode, int32_t keyAction)
890 {
891 int32_t ret = HiSysEventWrite(
892 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
893 "KAYBOARD_EVENT",
894 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
895 "KEY_EVENT_TYPE", eventType,
896 "KEY_CODE", keyCode,
897 "KEY_ACTION", keyAction);
898 if (ret != RET_OK) {
899 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
900 }
901 }
902
ReportLaunchAbility(std::string bundleName)903 void DfxHisysevent::ReportLaunchAbility(std::string bundleName)
904 {
905 int32_t ret = HiSysEventWrite(
906 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
907 "LAUNCH_ABILITY",
908 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
909 "BUNDLE_NAME", bundleName);
910 if (ret != RET_OK) {
911 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
912 }
913 }
914
ReportCommonAction(std::string action)915 void DfxHisysevent::ReportCommonAction(std::string action)
916 {
917 int32_t ret = HiSysEventWrite(
918 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
919 "COMMON_ACTION",
920 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
921 "ACTION", action);
922 if (ret != RET_OK) {
923 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
924 }
925 }
926
ReportTouchEvent(int32_t pointAction,int32_t pointId,int32_t windowId)927 void DfxHisysevent::ReportTouchEvent(int32_t pointAction, int32_t pointId, int32_t windowId)
928 {
929 int32_t ret = HiSysEventWrite(
930 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
931 "TOUCH_EVENT",
932 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
933 "POINT_ACTION", pointAction,
934 "POINT_ID", pointId,
935 "WINDOW_ID", windowId);
936 if (ret != RET_OK) {
937 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
938 }
939 }
940
ReportSetCustomCursor(int32_t windowPid,int32_t windowId)941 void DfxHisysevent::ReportSetCustomCursor(int32_t windowPid, int32_t windowId)
942 {
943 int32_t ret = HiSysEventWrite(
944 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
945 "SET_CUSTOM_CURSOR",
946 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
947 "WINDOW_PID", windowPid,
948 "WINDOW_ID", windowId);
949 if (ret != RET_OK) {
950 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
951 }
952 }
953
ReportSetMouseIcon(int32_t windowId)954 void DfxHisysevent::ReportSetMouseIcon(int32_t windowId)
955 {
956 int32_t ret = HiSysEventWrite(
957 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
958 "SET_MOUSE_ICON",
959 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
960 "WINDOW_ID", windowId);
961 if (ret != RET_OK) {
962 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
963 }
964 }
965
ReportSetPointerStyle(int32_t windowId,int32_t pointerStyleId,bool isUiExtension)966 void DfxHisysevent::ReportSetPointerStyle(int32_t windowId, int32_t pointerStyleId, bool isUiExtension)
967 {
968 int32_t ret = HiSysEventWrite(
969 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
970 "SET_POINTER_STYLE",
971 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
972 "WINDOW_ID", windowId,
973 "POINTER_STYLE_ID", pointerStyleId,
974 "IS_UIEXTENSION", isUiExtension);
975 if (ret != RET_OK) {
976 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
977 }
978 }
979
ReportSetPointerVisible(bool visible,int32_t priority)980 void DfxHisysevent::ReportSetPointerVisible(bool visible, int32_t priority)
981 {
982 int32_t ret = HiSysEventWrite(
983 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
984 "SET_POINTER_VISIBLE",
985 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
986 "VISIBLE", visible,
987 "PRIORITY", priority);
988 if (ret != RET_OK) {
989 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
990 }
991 }
992
ReportSetPointerSpeed(int32_t speed)993 void DfxHisysevent::ReportSetPointerSpeed(int32_t speed)
994 {
995 int32_t ret = HiSysEventWrite(
996 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
997 "SET_POINTER_SPEED",
998 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
999 "SPEED", speed);
1000 if (ret != RET_OK) {
1001 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1002 }
1003 }
1004
ReportAddInputHandler(int32_t handlerType)1005 void DfxHisysevent::ReportAddInputHandler(int32_t handlerType)
1006 {
1007 int32_t ret = HiSysEventWrite(
1008 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1009 "ADD_INPUT_HANDLER",
1010 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1011 "INPUT_HANDLER_TYPE", handlerType);
1012 if (ret != RET_OK) {
1013 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1014 }
1015 }
1016
ReportRemoveInputHandler(int32_t handlerType)1017 void DfxHisysevent::ReportRemoveInputHandler(int32_t handlerType)
1018 {
1019 int32_t ret = HiSysEventWrite(
1020 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1021 "REMOVE_INPUT_HANDLER",
1022 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1023 "INPUT_HANDLER_TYPE", handlerType);
1024 if (ret != RET_OK) {
1025 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1026 }
1027 }
1028
ReportInjectPointerEvent(bool isNativeInject)1029 void DfxHisysevent::ReportInjectPointerEvent(bool isNativeInject)
1030 {
1031 int32_t ret = HiSysEventWrite(
1032 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1033 "INJECT_POINTER_EVENT",
1034 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1035 "IS_NATIVE_INJECT", isNativeInject);
1036 if (ret != RET_OK) {
1037 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1038 }
1039 }
1040
ReportEnableCombineKey(bool enable)1041 void DfxHisysevent::ReportEnableCombineKey(bool enable)
1042 {
1043 int32_t ret = HiSysEventWrite(
1044 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1045 "ENABLE_COMBINE_KEY",
1046 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1047 "ENABLE", enable);
1048 if (ret != RET_OK) {
1049 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1050 }
1051 }
1052
ReportAppendExtraData()1053 void DfxHisysevent::ReportAppendExtraData()
1054 {
1055 int32_t ret = HiSysEventWrite(
1056 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1057 "APPEND_EXTRA_DATA",
1058 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR);
1059 if (ret != RET_OK) {
1060 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1061 }
1062 }
1063
ReportTransmitInfrared(int64_t number)1064 void DfxHisysevent::ReportTransmitInfrared(int64_t number)
1065 {
1066 int32_t ret = HiSysEventWrite(
1067 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1068 "APPEND_EXTRA_DATA",
1069 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1070 "ENABLE", number);
1071 if (ret != RET_OK) {
1072 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1073 }
1074 }
1075
ReportSetCurrentUser(int32_t userId)1076 void DfxHisysevent::ReportSetCurrentUser(int32_t userId)
1077 {
1078 int32_t ret = HiSysEventWrite(
1079 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1080 "SET_CURRENT_USER",
1081 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1082 "USER_ID", userId);
1083 if (ret != RET_OK) {
1084 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1085 }
1086 }
1087
1088 #ifdef OHOS_BUILD_ENABLE_DFX_RADAR
ReportApiCallTimes(ApiDurationStatistics::Api api,int32_t durationMS)1089 void DfxHisysevent::ReportApiCallTimes(ApiDurationStatistics::Api api, int32_t durationMS)
1090 {
1091 apiDurationStatics_.RecordDuration(api, durationMS);
1092 if (!apiDurationStatics_.IsLimitMatched()) {
1093 return;
1094 }
1095 static std::vector<std::string> apiDurationBox { "<=3MS", "<=5MS", "<=10MS", ">10MS" };
1096 HiSysEventWrite(
1097 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1098 "EXTERNAL_CALL_STATISTIC",
1099 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
1100 "API_DURATION_BOX", apiDurationBox,
1101 "IS_SCREEN_CAPTURE_WORKING",
1102 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::IS_SCREEN_CAPTURE_WORKING),
1103 "GET_DEFAULT_DISPLAY",
1104 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_DEFAULT_DISPLAY),
1105 "GET_SYSTEM_ABILITY_MANAGER",
1106 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_SYSTEM_ABILITY_MANAGER),
1107 "IS_FOLDABLE",
1108 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::IS_FOLDABLE),
1109 "IS_SCREEN_LOCKED",
1110 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::IS_SCREEN_LOCKED),
1111 "RS_NOTIFY_TOUCH_EVENT",
1112 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::RS_NOTIFY_TOUCH_EVENT),
1113 "RESOURCE_SCHEDULE_REPORT_DATA",
1114 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::RESOURCE_SCHEDULE_REPORT_DATA),
1115 "GET_CUR_RENDERER_CHANGE_INFOS",
1116 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_CUR_RENDERER_CHANGE_INFOS),
1117 "GET_PROC_RUNNING_INFOS_BY_UID",
1118 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_PROC_RUNNING_INFOS_BY_UID),
1119 "TELEPHONY_CALL_MGR_INIT",
1120 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_INIT),
1121 "TELEPHONY_CALL_MGR_MUTE_RINGER",
1122 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_MUTE_RINGER),
1123 "TELEPHONY_CALL_MGR_HANG_UP_CALL",
1124 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_HANG_UP_CALL),
1125 "TELEPHONY_CALL_MGR_REJECT_CALL",
1126 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::TELEPHONY_CALL_MGR_REJECT_CALL),
1127 "RE_SCREEN_MODE_CHANGE_LISTENER",
1128 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::RE_SCREEN_MODE_CHANGE_LISTENER),
1129 "SET_ON_REMOTE_DIED_CALLBACK",
1130 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::SET_ON_REMOTE_DIED_CALLBACK),
1131 "REG_SCREEN_CAPTURE_LISTENER",
1132 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::REG_SCREEN_CAPTURE_LISTENER),
1133 "ABILITY_MGR_START_EXT_ABILITY",
1134 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::ABILITY_MGR_START_EXT_ABILITY),
1135 "ABILITY_MGR_CLIENT_START_ABILITY",
1136 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::ABILITY_MGR_CLIENT_START_ABILITY),
1137 "ABILITY_MGR_CONNECT_ABILITY",
1138 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::ABILITY_MGR_CONNECT_ABILITY),
1139 "GET_RUNNING_PROCESS_INFO_BY_PID",
1140 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_RUNNING_PROCESS_INFO_BY_PID),
1141 "REGISTER_APP_DEBUG_LISTENER",
1142 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::REGISTER_APP_DEBUG_LISTENER),
1143 "UNREGISTER_APP_DEBUG_LISTENER",
1144 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::UNREGISTER_APP_DEBUG_LISTENER),
1145 "PUBLISH_COMMON_EVENT",
1146 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::PUBLISH_COMMON_EVENT),
1147 "GET_VISIBILITY_WINDOW_INFO",
1148 apiDurationStatics_.GetDurationDistribution(ApiDurationStatistics::Api::GET_VISIBILITY_WINDOW_INFO)
1149 );
1150 apiDurationStatics_.ResetApiStatistics();
1151 }
1152
ReportMMiServiceThreadLongTask(const std::string & taskName)1153 void DfxHisysevent::ReportMMiServiceThreadLongTask(const std::string &taskName)
1154 {
1155 int32_t ret = HiSysEventWrite(
1156 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1157 "MMI_LONG_TASK",
1158 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
1159 "TASK_NAME", taskName);
1160 if (ret != RET_OK) {
1161 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1162 }
1163 }
1164 #endif // OHOS_BUILD_ENABLE_DFX_RADAR
1165
ClearKeyEventCount()1166 void DfxHisysevent::ClearKeyEventCount()
1167 {
1168 calKeyEventTime_.clear();
1169 keyEventCount_ = 0;
1170 }
1171
ReportKeyEvent(std::string name)1172 void DfxHisysevent::ReportKeyEvent(std::string name)
1173 {
1174 if (name == NAME_FILTER) {
1175 ReportKeyEventTimes(KEY_FILTER);
1176 } else if (name == NAME_INTERCEPT) {
1177 ReportKeyEventTimes(KEY_INTERCEPT);
1178 } else if (name == NAME_SUBCRIBER) {
1179 ReportKeyEventTimes(KEY_SUBCRIBER);
1180 } else if (name == NAME_FINGERPRINT) {
1181 ReportKeyEventTimes(FINGERPRINT);
1182 } else if (name == NAME_STYLUS) {
1183 ReportKeyEventTimes(STYLUS_PEN);
1184 } else if (name == AIBASE_BUNDLE_NAME) {
1185 ReportKeyEventTimes(AIBASE_VOICE);
1186 } else if (name == SCREENSHOT_BUNDLE_NAME) {
1187 ReportKeyEventTimes(SCREEN_SHOT);
1188 } else if (name == SCREENRECORDER_BUNDLE_NAME) {
1189 ReportKeyEventTimes(SCREEN_RECORDING);
1190 } else if (name == WALLET_BUNDLE_NAME) {
1191 ReportKeyEventTimes(OPEN_WALLET);
1192 } else if (name == SOS_BUNDLE_NAME) {
1193 ReportKeyEventTimes(OPEN_SOS);
1194 } else if (name == NAME_CANCEL) {
1195 ReportKeyEventTimes(KEY_EVENT_CANCEL);
1196 } else if (name == TOUCH_SCREEN_ON) {
1197 ReportKeyEventTimes(KEY_SCREEN_ON);
1198 } else {
1199 ReportKeyEventTimes(DISPATCH_KEY);
1200 }
1201 }
1202
ReportKeyEventTimes(KEY_CONSUMPTION_TYPE type)1203 void DfxHisysevent::ReportKeyEventTimes(KEY_CONSUMPTION_TYPE type)
1204 {
1205 if (keyEventCount_ < REPORT_MAX_KEY_EVENT_TIMES) {
1206 keyEventCount_++;
1207 calKeyEventTime_[type]++;
1208 } else {
1209 int32_t ret = HiSysEventWrite(
1210 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1211 "KEY_EVENT_STATISTIC",
1212 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
1213 "DISPATCH_KEY", calKeyEventTime_[DISPATCH_KEY],
1214 "KEY_FILTER", calKeyEventTime_[KEY_FILTER],
1215 "KEY_INTERCEPT", calKeyEventTime_[KEY_INTERCEPT],
1216 "KEY_SUBCRIBER", calKeyEventTime_[KEY_SUBCRIBER],
1217 "FINGERPRINT", calKeyEventTime_[FINGERPRINT],
1218 "STYLUS_PEN", calKeyEventTime_[STYLUS_PEN],
1219 "AIBASE_VOICE", calKeyEventTime_[AIBASE_VOICE],
1220 "SCREEN_SHOT", calKeyEventTime_[SCREEN_SHOT],
1221 "SCREEN_RECORDING", calKeyEventTime_[SCREEN_RECORDING],
1222 "OPEN_WALLET", calKeyEventTime_[OPEN_WALLET],
1223 "OPEN_SOS", calKeyEventTime_[OPEN_SOS],
1224 "KEY_CANCEL", calKeyEventTime_[KEY_EVENT_CANCEL],
1225 "KEY_SCREEN_ON", calKeyEventTime_[KEY_SCREEN_ON]);
1226 if (ret != 0) {
1227 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1228 }
1229 ClearKeyEventCount();
1230 }
1231 }
1232
ReportFailLaunchAbility(std::string bundleName,int32_t errorCode)1233 void DfxHisysevent::ReportFailLaunchAbility(std::string bundleName, int32_t errorCode)
1234 {
1235 int32_t ret = HiSysEventWrite(
1236 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1237 "KEY_EVENT_FAULT",
1238 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
1239 "BUNDLE_NAME", bundleName,
1240 "ERROR_CODE", errorCode);
1241 if (ret != 0) {
1242 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1243 }
1244 }
1245
ReportFailSubscribeKey(std::string functionName,std::string subscribeName,int32_t keyCode,int32_t errorCode)1246 void DfxHisysevent::ReportFailSubscribeKey(std::string functionName, std::string subscribeName,
1247 int32_t keyCode, int32_t errorCode)
1248 {
1249 int32_t ret = HiSysEventWrite(
1250 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1251 "KEY_EVENT_FAULT",
1252 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
1253 "FUNCTION_NAME", functionName,
1254 "SUBSCRIBE_NAME", subscribeName,
1255 "KEY_CODE", keyCode,
1256 "ERROR_CODE", errorCode);
1257 if (ret != 0) {
1258 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1259 }
1260 }
1261
ReportFailHandleKey(std::string name,int32_t keyCode,int32_t errorCode)1262 void DfxHisysevent::ReportFailHandleKey(std::string name, int32_t keyCode, int32_t errorCode)
1263 {
1264 int32_t ret = HiSysEventWrite(
1265 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
1266 "KEY_EVENT_FAULT",
1267 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
1268 "FUNCTION_NAME", name,
1269 "KEY_CODE", keyCode,
1270 "ERROR_CODE", errorCode);
1271 if (ret != 0) {
1272 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
1273 }
1274 }
1275 } // namespace MMI
1276 } // namespace OHOS