• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "dfx_hisysevent.h"
16 
17 namespace OHOS {
18 namespace MMI {
19 namespace {
20 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, MMI_LOG_DOMAIN, "DfxHisysevent" };
21 constexpr int32_t INVALID_DEVICE_ID = -1;
22 constexpr uint32_t REPORT_DISPATCH_TIMES = 100;
23 constexpr uint32_t REPORT_COMBO_START_TIMES = 100;
24 constexpr uint32_t POINTER_CLEAR_TIMES = 10;
25 constexpr int32_t CONVERSION_US_TO_MS = 1000;
26 constexpr int32_t TIMES_LEVEL1 = 10;
27 constexpr int32_t TIMES_LEVEL2 = 25;
28 constexpr int32_t TIMES_LEVEL3 = 30;
29 constexpr int32_t TIMES_LEVEL4 = 50;
30 } // namespace
31 
OnDeviceConnect(int32_t id,OHOS::HiviewDFX::HiSysEvent::EventType type)32 void DfxHisysevent::OnDeviceConnect(int32_t id, OHOS::HiviewDFX::HiSysEvent::EventType type)
33 {
34     std::shared_ptr dev = InputDevMgr->GetInputDevice(id);
35     CHKPV(dev);
36     std::string message;
37     std::string name = "";
38     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::FAULT) {
39         message = "The input_device connection failed for already existing";
40         name = "INPUT_DEV_CONNECTION_FAILURE";
41     } else {
42         message = "The input_device connection succeed";
43         name = "INPUT_DEV_CONNECTION_SUCCESS";
44     }
45     if (id == INT32_MAX) {
46         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
47             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
48             name,
49             type,
50             "MSG", "The input_device connection failed because the nextId_ exceeded the upper limit");
51         if (ret != 0) {
52             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
53         }
54     } else {
55         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
56             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
57             name,
58             type,
59             "DEVICE_ID", id,
60             "DEVICE_PHYS", dev->GetPhys(),
61             "DEVICE_NAME", dev->GetName(),
62             "DEVICE_TYPE", dev->GetType(),
63             "MSG", message);
64         if (ret != 0) {
65             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
66         }
67     }
68 }
69 
OnDeviceDisconnect(int32_t id,OHOS::HiviewDFX::HiSysEvent::EventType type)70 void DfxHisysevent::OnDeviceDisconnect(int32_t id, OHOS::HiviewDFX::HiSysEvent::EventType type)
71 {
72     if (id == INVALID_DEVICE_ID) {
73         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
74             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
75             "INPUT_DEV_DISCONNECTION_FAILURE",
76             type,
77             "MSG", "The input device failed to disconnect to server");
78         if (ret != 0) {
79             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
80         }
81     } else {
82         std::shared_ptr dev = InputDevMgr->GetInputDevice(id);
83         CHKPV(dev);
84         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
85             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
86             "INPUT_DEV_DISCONNECTION_SUCCESS",
87             type,
88             "DEVICE_Id", id,
89             "DEVICE_PHYS", dev->GetPhys(),
90             "DEVICE_NAME", dev->GetName(),
91             "DEVICE_TYPE", dev->GetType(),
92             "MSG", "The input device successfully disconnect to server");
93         if (ret != 0) {
94             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
95         }
96     }
97 }
98 
OnClientConnect(const ClientConnectData & data,OHOS::HiviewDFX::HiSysEvent::EventType type)99 void DfxHisysevent::OnClientConnect(const ClientConnectData &data, OHOS::HiviewDFX::HiSysEvent::EventType type)
100 {
101     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
102         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
103             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
104             "CLIENT_CONNECTION_SUCCESS",
105             type,
106             "PID", data.pid,
107             "UID", data.uid,
108             "MODULE_TYPE", data.moduleType,
109             "SERVER_FD", data.serverFd,
110             "PROGRAMNAME", data.programName,
111             "MSG", "The client successfully connected to the server");
112         if (ret != 0) {
113             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
114         }
115     } else {
116         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
117             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
118             "CLIENT_CONNECTION_FAILURE",
119             type,
120             "PID", data.pid,
121             "UID", data.uid,
122             "MODULE_TYPE", data.moduleType,
123             "PROGRAMNAME", data.programName,
124             "MSG", "The client failed to connect to the server");
125         if (ret != 0) {
126             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
127         }
128     }
129 }
130 
OnClientDisconnect(const SessionPtr & secPtr,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)131 void DfxHisysevent::OnClientDisconnect(const SessionPtr& secPtr, int32_t fd,
132     OHOS::HiviewDFX::HiSysEvent::EventType type)
133 {
134     CHKPV(secPtr);
135     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
136         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
137             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
138             "CLIENT_DISCONNECTION_SUCCESS",
139             type,
140             "PID", secPtr->GetPid(),
141             "UID", secPtr->GetUid(),
142             "MODULE_TYPE", secPtr->GetModuleType(),
143             "FD", fd,
144             "PROGRAMNAME", secPtr->GetProgramName(),
145             "MSG", "The client successfully disconnected to the server");
146         if (ret != 0) {
147             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
148         }
149     } else {
150         if (secPtr == nullptr) {
151             int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
152                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
153                 "CLIENT_DISCONNECTION_FAILURE",
154                 type,
155                 "MSG", "The client failed to disconnect to the server because secPtr is nullptr");
156             if (ret != 0) {
157                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
158             }
159         } else {
160             int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
161                 OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
162                 "CLIENT_DISCONNECTION_FAILURE",
163                 type,
164                 "MSG", "The client failed to disconnect to the server because close(fd) return error");
165             if (ret != 0) {
166                 MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
167             }
168         }
169     }
170 }
171 
OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)172 void DfxHisysevent::OnUpdateTargetPointer(std::shared_ptr<PointerEvent> pointer, int32_t fd,
173     OHOS::HiviewDFX::HiSysEvent::EventType type)
174 {
175     CHKPV(pointer);
176     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
177         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
178             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
179             "TARGET_POINTER_EVENT_SUCCESS",
180             type,
181             "EVENTTYPE", pointer->GetEventType(),
182             "AGENT_WINDOWID", pointer->GetAgentWindowId(),
183             "TARGET_WINDOWID", pointer->GetTargetWindowId(),
184             "PID", WinMgr->GetWindowPid(pointer->GetTargetWindowId()),
185             "FD", fd,
186             "MSG", "The window manager successfully update target pointer");
187         if (ret != 0) {
188             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
189         }
190     } else {
191         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
192             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
193             "TARGET_POINTER_EVENT_FAILURE",
194             OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
195             "EVENTTYPE", pointer->GetEventType(),
196             "MSG", "The window manager failed to update target pointer");
197         if (ret != 0) {
198             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
199         }
200     }
201 }
202 
OnUpdateTargetKey(std::shared_ptr<KeyEvent> key,int32_t fd,OHOS::HiviewDFX::HiSysEvent::EventType type)203 void DfxHisysevent::OnUpdateTargetKey(std::shared_ptr<KeyEvent> key, int32_t fd,
204     OHOS::HiviewDFX::HiSysEvent::EventType type)
205 {
206     CHKPV(key);
207     if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
208         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
209             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
210             "TARGET_KEY_EVENT_SUCCESS",
211             type,
212             "EVENTTYPE", key->GetEventType(),
213             "KEYCODE", key->GetKeyCode(),
214             "ACTION", key->GetAction(),
215             "ACTION_TIME", key->GetActionTime(),
216             "ACTION_STARTTIME", key->GetActionStartTime(),
217             "FLAG", key->GetFlag(),
218             "KEYACTION", key->GetKeyAction(),
219             "FD", fd,
220             "AGENT_WINDOWID", key->GetAgentWindowId(),
221             "TARGET_WINDOWID", key->GetTargetWindowId(),
222             "PID", WinMgr->GetWindowPid(key->GetTargetWindowId()),
223             "MSG", "The window manager successfully update target key");
224         if (ret != 0) {
225             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
226         }
227     } else {
228         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
229             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
230             "TARGET_KEY_EVENT_FAILURE",
231             type,
232             "EVENTTYPE", key->GetEventType(),
233             "KEYCODE", key->GetKeyCode(),
234             "ACTION", key->GetAction(),
235             "ACTION_TIME", key->GetActionTime(),
236             "ACTION_STARTTIME", key->GetActionStartTime(),
237             "FLAG", key->GetFlag(),
238             "KEYACTION", key->GetKeyAction(),
239             "MSG", "The window manager failed to update target key");
240         if (ret != 0) {
241             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
242         }
243     }
244 }
245 
OnFocusWindowChanged(int32_t oldFocusWindowId,int32_t newFocusWindowId,int32_t oldFocusWindowPid,int32_t newFocusWindowPid)246 void DfxHisysevent::OnFocusWindowChanged(int32_t oldFocusWindowId, int32_t newFocusWindowId,
247     int32_t oldFocusWindowPid, int32_t newFocusWindowPid)
248 {
249     int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
250         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
251         "FOCUS_WINDOW_CHANGE",
252         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
253         "OLD_FOCUS_WINDOWID", oldFocusWindowId,
254         "NEW_FOCUS_WINDOWID", newFocusWindowId,
255         "OLD_FOCUS_WINDOWPID", oldFocusWindowPid,
256         "NEW_FOCUS_WINDOWPID", newFocusWindowPid,
257         "MSG", "The focusWindowId changing succeeded");
258     if (ret != 0) {
259         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
260     }
261 }
262 
OnZorderWindowChanged(int32_t oldZorderFirstWindowId,int32_t newZorderFirstWindowId,int32_t oldZorderFirstWindowPid,int32_t newZorderFirstWindowPid)263 void DfxHisysevent::OnZorderWindowChanged(int32_t oldZorderFirstWindowId, int32_t newZorderFirstWindowId,
264     int32_t oldZorderFirstWindowPid, int32_t newZorderFirstWindowPid)
265 {
266     int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
267         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
268         "Z_ORDER_WINDOW_CHANGE",
269         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
270         "OLD_ZORDER_FIRST_WINDOWID", oldZorderFirstWindowId,
271         "NEW_ZORDER_FIRST_WINDOWID", newZorderFirstWindowId,
272         "OLD_ZORDER_FIRST_WINDOWPID", oldZorderFirstWindowPid,
273         "NEW_ZORDER_FIRST_WINDOWPID", newZorderFirstWindowPid,
274         "MSG", "The ZorderFirstWindow changing succeeded");
275     if (ret != 0) {
276         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
277     }
278 }
279 
ApplicationBlockInput(const SessionPtr & sess)280 void DfxHisysevent::ApplicationBlockInput(const SessionPtr& sess)
281 {
282     int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
283         OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
284         "APPLICATION_BLOCK_INPUT",
285         OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
286         "PID", sess->GetPid(),
287         "UID", sess->GetUid(),
288         "PACKAGE_NAME", sess->GetProgramName(),
289         "PROCESS_NAME", sess->GetProgramName(),
290         "MSG", "User input does not respond");
291     if (ret != 0) {
292         MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
293     }
294 }
295 
CalcKeyDispTimes()296 void DfxHisysevent::CalcKeyDispTimes()
297 {
298     int64_t endTime = GetSysClockTime();
299     dispCastTime_.totalTimes++;
300     int64_t castTime = (endTime - dispatchStartTime_)  / CONVERSION_US_TO_MS;
301     if (castTime <= TIMES_LEVEL1) {
302         dispCastTime_.below10msTimes++;
303     } else if (castTime <= TIMES_LEVEL2) {
304         dispCastTime_.below25msTimes++;
305     } else if (castTime <= TIMES_LEVEL4) {
306         dispCastTime_.below50msTimes++;
307     } else {
308         dispCastTime_.above50msTimes++;
309     }
310 }
311 
CalcPointerDispTimes()312 void DfxHisysevent::CalcPointerDispTimes()
313 {
314     int64_t endTime = GetSysClockTime();
315     dispCastTime_.sampleCount++;
316     int64_t castTime = (endTime - dispatchStartTime_)  / CONVERSION_US_TO_MS;
317     if (dispCastTime_.sampleCount == POINTER_CLEAR_TIMES) {
318         dispCastTime_.sampleCount = 0;
319         dispCastTime_.totalTimes++;
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 }
331 
ReportDispTimes()332 void DfxHisysevent::ReportDispTimes()
333 {
334     if (dispCastTime_.totalTimes >= REPORT_DISPATCH_TIMES) {
335         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
336             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
337             "INPUT_DISPATCH_TIME",
338             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
339             "BELOW10MS", dispCastTime_.below10msTimes,
340             "BELOW25MS", dispCastTime_.below25msTimes,
341             "BELOW50MS", dispCastTime_.below50msTimes,
342             "ABOVE50MS", dispCastTime_.above50msTimes,
343             "MSG", "The costing time to dispatch event");
344         if (ret != 0) {
345             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
346         } else {
347             dispCastTime_.sampleCount = 0;
348             dispCastTime_.totalTimes = 0;
349             dispCastTime_.below10msTimes = 0;
350             dispCastTime_.below25msTimes = 0;
351             dispCastTime_.below50msTimes = 0;
352             dispCastTime_.above50msTimes = 0;
353         }
354     }
355 }
356 
CalcComboStartTimes(const int32_t keyDownDuration)357 void DfxHisysevent::CalcComboStartTimes(const int32_t keyDownDuration)
358 {
359     int64_t endTime = GetSysClockTime();
360     comboStartCastTime_.totalTimes++;
361     int64_t castTime = (endTime - comboStartTime_) / CONVERSION_US_TO_MS - keyDownDuration;
362     if (castTime <= TIMES_LEVEL1) {
363         comboStartCastTime_.below10msTimes++;
364     } else if (castTime <= TIMES_LEVEL3) {
365         comboStartCastTime_.below30msTimes++;
366     } else if (castTime <= TIMES_LEVEL4) {
367         comboStartCastTime_.below50msTimes++;
368     } else {
369         comboStartCastTime_.above50msTimes++;
370     }
371 }
372 
ReportComboStartTimes()373 void DfxHisysevent::ReportComboStartTimes()
374 {
375     if (comboStartCastTime_.totalTimes >= REPORT_COMBO_START_TIMES) {
376         int32_t ret = OHOS::HiviewDFX::HiSysEvent::Write(
377             OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MODAL_INPUT,
378             "COMBO_START_TIME",
379             OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
380             "BELOW10MS", comboStartCastTime_.below10msTimes,
381             "BELOW30MS", comboStartCastTime_.below30msTimes,
382             "BELOW50MS", comboStartCastTime_.below50msTimes,
383             "ABOVE50MS", comboStartCastTime_.above50msTimes,
384             "MSG", "The costing time to launch application of combination");
385         if (ret != 0) {
386             MMI_HILOGE("HiviewDFX Write failed, ret:%{public}d", ret);
387         } else {
388             comboStartCastTime_.totalTimes = 0;
389             comboStartCastTime_.below10msTimes = 0;
390             comboStartCastTime_.below30msTimes = 0;
391             comboStartCastTime_.below50msTimes = 0;
392             comboStartCastTime_.above50msTimes = 0;
393         }
394     }
395 }
396 }
397 }
398 
399