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 "bytrace_adapter.h"
16
17 #include "hitrace_meter.h"
18 #include "mmi_log.h"
19
20 #undef MMI_LOG_TAG
21 #define MMI_LOG_TAG "BytraceAdapter"
22
23 namespace OHOS {
24 namespace MMI {
25 namespace {
26 const std::string ON_KEY_EVENT { "OnKeyEvent" };
27 const std::string ON_TOUCH_EVENT { "OnTouchEvent" };
28 const std::string ON_POINTER_EVENT { "OnPointerEvent" };
29 const std::string KEY_EVENT_DISPATCH { "KeyEventDispatch" };
30 const std::string TOUCH_EVENT_DISPATCH { "touchEventDispatch" };
31 const std::string POINTER_EVENT_DISPATCH { "PointerEventDispatch" };
32 const std::string KEY_EVENT_SUBSCRIBE { "KeyEventSubscribe" };
33 const std::string POINTER_EVENT_INTERCEPT { "PointerEventIntercept" };
34 const std::string TOUCH_EVENT_INTERCEPT { "TouchEventIntercept" };
35 const std::string KEY_EVENT_INTERCEPT { "KeyEventIntercept" };
36 const std::string ON_START_EVENT { "StartEvent" };
37 const std::string ON_LAUNCH_EVENT { "LaunchEvent" };
38 const std::string ON_STOP_EVENT { "StopEvent" };
39 constexpr int32_t START_ID { 1 };
40 constexpr int32_t LAUNCH_ID { 2 };
41 constexpr int32_t STOP_ID { 3 };
42 } // namespace
43
StartBytrace(std::shared_ptr<KeyEvent> keyEvent)44 void BytraceAdapter::StartBytrace(std::shared_ptr<KeyEvent> keyEvent)
45 {
46 CHKPV(keyEvent);
47 int32_t keyId = keyEvent->GetId();
48 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_KEY_EVENT, keyId);
49 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "service report keyId=" + std::to_string(keyId));
50 }
51
GetKeyTraceString(std::shared_ptr<KeyEvent> keyEvent)52 std::string BytraceAdapter::GetKeyTraceString(std::shared_ptr<KeyEvent> keyEvent)
53 {
54 CHKPS(keyEvent);
55 return KeyEvent::ActionToString(keyEvent->GetKeyAction());
56 }
57
GetPointerTraceString(std::shared_ptr<PointerEvent> pointerEvent)58 std::string BytraceAdapter::GetPointerTraceString(std::shared_ptr<PointerEvent> pointerEvent)
59 {
60 CHKPS(pointerEvent);
61 std::vector<PointerEvent::PointerItem> pointerItems;
62 std::vector<int32_t> pointerIds{ pointerEvent->GetPointerIds() };
63 for (const auto &pointerId : pointerIds) {
64 PointerEvent::PointerItem item;
65 if (!pointerEvent->GetPointerItem(pointerId, item)) {
66 MMI_HILOGE("Invalid pointer:%{public}d", pointerId);
67 return "";
68 }
69 pointerItems.emplace_back(item);
70 }
71 std::string traceStr;
72 for (const auto &item : pointerItems) {
73 auto id = item.GetPointerId();
74 auto displayX = item.GetDisplayX();
75 auto displayY = item.GetDisplayY();
76 traceStr += " [";
77 traceStr += "id: " + std::to_string(id);
78 traceStr += ", x:" + std::to_string(displayX);
79 traceStr += ", y:" + std::to_string(displayY);
80 traceStr += "]";
81 }
82 return traceStr;
83 }
84
StartBytrace(std::shared_ptr<PointerEvent> pointerEvent,TraceBtn traceBtn)85 void BytraceAdapter::StartBytrace(std::shared_ptr<PointerEvent> pointerEvent, TraceBtn traceBtn)
86 {
87 CHKPV(pointerEvent);
88 int32_t eventId = pointerEvent->GetId();
89 if (traceBtn == TRACE_START) {
90 if (pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) {
91 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_POINTER_EVENT, eventId);
92 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "service report pointerId:" + std::to_string(eventId) +
93 + ", type: " + pointerEvent->DumpPointerAction());
94 } else {
95 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_TOUCH_EVENT, eventId);
96 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "service report touchId:" + std::to_string(eventId) +
97 + ", type: " + pointerEvent->DumpPointerAction());
98 }
99 } else {
100 if (pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) {
101 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_POINTER_EVENT, eventId);
102 } else {
103 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_TOUCH_EVENT, eventId);
104 }
105 }
106 }
107
StartBytrace(std::shared_ptr<KeyEvent> key,HandlerType handlerType)108 void BytraceAdapter::StartBytrace(std::shared_ptr<KeyEvent> key, HandlerType handlerType)
109 {
110 CHKPV(key);
111 std::string checkKeyCode;
112 switch (handlerType) {
113 case KEY_INTERCEPT_EVENT: {
114 checkKeyCode = "Intercept keyCode";
115 break;
116 }
117 case KEY_LAUNCH_EVENT: {
118 checkKeyCode = "Launch keyCode";
119 break;
120 }
121 case KEY_SUBSCRIBE_EVENT: {
122 checkKeyCode = "Subscribe keyCode";
123 break;
124 }
125 case KEY_DISPATCH_EVENT: {
126 checkKeyCode = "Dispatch keyCode";
127 break;
128 }
129 default: {
130 checkKeyCode = "Unknown keyCode";
131 break;
132 }
133 }
134 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, checkKeyCode);
135 int32_t keyId = key->GetId();
136 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_KEY_EVENT, keyId);
137 }
138
StartBytrace(std::shared_ptr<KeyEvent> keyEvent,TraceBtn traceBtn,HandlerType handlerType)139 void BytraceAdapter::StartBytrace(std::shared_ptr<KeyEvent> keyEvent, TraceBtn traceBtn, HandlerType handlerType)
140 {
141 CHKPV(keyEvent);
142 int32_t keyId = keyEvent->GetId();
143 if (traceBtn == TRACE_START) {
144 switch (handlerType) {
145 case KEY_INTERCEPT_EVENT: {
146 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_INTERCEPT, keyId);
147 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "client Intercept keyCode");
148 break;
149 }
150 case KEY_SUBSCRIBE_EVENT: {
151 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_SUBSCRIBE, keyId);
152 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "client subscribe keyCode");
153 break;
154 }
155 case KEY_DISPATCH_EVENT: {
156 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_DISPATCH, keyId);
157 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "client dispatch keyCode");
158 break;
159 }
160 default: {
161 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "Unknown keyCode");
162 break;
163 }
164 }
165 } else {
166 switch (handlerType) {
167 case KEY_INTERCEPT_EVENT: {
168 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_INTERCEPT, keyId);
169 break;
170 }
171 case KEY_SUBSCRIBE_EVENT: {
172 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_SUBSCRIBE, keyId);
173 break;
174 }
175 case KEY_DISPATCH_EVENT: {
176 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_DISPATCH, keyId);
177 break;
178 }
179 default: {
180 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "Unknown keyCode");
181 break;
182 }
183 }
184 }
185 }
186
StartBytrace(std::shared_ptr<PointerEvent> pointerEvent,TraceBtn traceBtn,HandlerType handlerType)187 void BytraceAdapter::StartBytrace(
188 std::shared_ptr<PointerEvent> pointerEvent, TraceBtn traceBtn, HandlerType handlerType)
189 {
190 CHKPV(pointerEvent);
191 int32_t eventId = pointerEvent->GetId();
192 if (traceBtn == TRACE_START) {
193 if (handlerType == POINT_DISPATCH_EVENT) {
194 if (pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) {
195 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, POINTER_EVENT_DISPATCH, eventId);
196 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "client dispatch pointerId:" + std::to_string(eventId));
197 } else {
198 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, TOUCH_EVENT_DISPATCH, eventId);
199 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "client dispatch touchId:" + std::to_string(eventId));
200 }
201 } else {
202 if (pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) {
203 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, POINTER_EVENT_INTERCEPT, eventId);
204 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT,
205 "client Intercept pointerId:" + std::to_string(eventId));
206 } else {
207 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, TOUCH_EVENT_INTERCEPT, eventId);
208 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, "client Intercept touchId:" + std::to_string(eventId));
209 }
210 }
211 } else {
212 if (handlerType == POINT_DISPATCH_EVENT) {
213 if (pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) {
214 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, POINTER_EVENT_DISPATCH, eventId);
215 } else {
216 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, TOUCH_EVENT_DISPATCH, eventId);
217 }
218 }
219 if (handlerType == POINT_INTERCEPT_EVENT) {
220 if (pointerEvent->GetSourceType() == PointerEvent::SOURCE_TYPE_MOUSE) {
221 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, POINTER_EVENT_INTERCEPT, eventId);
222 } else {
223 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, TOUCH_EVENT_INTERCEPT, eventId);
224 }
225 }
226 }
227 }
228
StartBytrace(TraceBtn traceBtn,EventType eventType)229 void BytraceAdapter::StartBytrace(TraceBtn traceBtn, EventType eventType)
230 {
231 std::string checkKeyCode;
232 if (traceBtn == TRACE_START) {
233 switch (eventType) {
234 case START_EVENT: {
235 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_START_EVENT, START_ID);
236 checkKeyCode = "crossing startId:" + std::to_string(START_ID);
237 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, checkKeyCode);
238 break;
239 }
240 case LAUNCH_EVENT: {
241 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_LAUNCH_EVENT, LAUNCH_ID);
242 checkKeyCode = "crossing launchId:" + std::to_string(LAUNCH_ID);
243 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, checkKeyCode);
244 break;
245 }
246 case STOP_EVENT: {
247 StartAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, ON_STOP_EVENT, STOP_ID);
248 checkKeyCode = "crossing stopId:" + std::to_string(STOP_ID);
249 HITRACE_METER_NAME(HITRACE_TAG_MULTIMODALINPUT, checkKeyCode);
250 break;
251 }
252 }
253 } else {
254 switch (eventType) {
255 case START_EVENT: {
256 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_INTERCEPT, START_ID);
257 break;
258 }
259 case LAUNCH_EVENT: {
260 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_INTERCEPT, LAUNCH_ID);
261 break;
262 }
263 case STOP_EVENT: {
264 FinishAsyncTrace(HITRACE_TAG_MULTIMODALINPUT, KEY_EVENT_INTERCEPT, STOP_ID);
265 break;
266 }
267 }
268 }
269 }
270
StartIpcServer(uint32_t code)271 void BytraceAdapter::StartIpcServer(uint32_t code)
272 {
273 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "ipcServerHandle code:" + std::to_string(code));
274 }
275
StopIpcServer()276 void BytraceAdapter::StopIpcServer()
277 {
278 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
279 }
280
StartPackageEvent(const std::string & msg)281 void BytraceAdapter::StartPackageEvent(const std::string& msg)
282 {
283 StartTrace(HITRACE_TAG_MULTIMODALINPUT, msg);
284 }
285
StopPackageEvent()286 void BytraceAdapter::StopPackageEvent()
287 {
288 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
289 }
290
StartHandleInput(int32_t code)291 void BytraceAdapter::StartHandleInput(int32_t code)
292 {
293 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "originEventHandle code:" + std::to_string(code));
294 }
295
StopHandleInput()296 void BytraceAdapter::StopHandleInput()
297 {
298 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
299 }
300
StartHandleTracker(int32_t pointerId)301 void BytraceAdapter::StartHandleTracker(int32_t pointerId)
302 {
303 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "pointerId:" + std::to_string(pointerId));
304 }
305
StopHandleTracker()306 void BytraceAdapter::StopHandleTracker()
307 {
308 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
309 }
310
StartConsumer(std::shared_ptr<PointerEvent> pointerEvent)311 void BytraceAdapter::StartConsumer(std::shared_ptr<PointerEvent> pointerEvent)
312 {
313 CHKPV(pointerEvent);
314 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "eventConsume pointerEventId:" + std::to_string(pointerEvent->GetId()));
315 }
316
StopConsumer()317 void BytraceAdapter::StopConsumer()
318 {
319 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
320 }
321
StartConsumer(std::shared_ptr<KeyEvent> keyEvent)322 void BytraceAdapter::StartConsumer(std::shared_ptr<KeyEvent> keyEvent)
323 {
324 CHKPV(keyEvent);
325 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "eventConsume keyEventId:" + std::to_string(keyEvent->GetId()));
326 }
327
StartPostTaskEvent(std::shared_ptr<PointerEvent> pointerEvent)328 void BytraceAdapter::StartPostTaskEvent(std::shared_ptr<PointerEvent> pointerEvent)
329 {
330 CHKPV(pointerEvent);
331 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "startpostEvent pointerEventId:" +
332 std::to_string(pointerEvent->GetId()));
333 }
334
StartPostTaskEvent(std::shared_ptr<KeyEvent> keyEvent)335 void BytraceAdapter::StartPostTaskEvent(std::shared_ptr<KeyEvent> keyEvent)
336 {
337 CHKPV(keyEvent);
338 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "startpostEvent keyEventId:" +
339 std::to_string(keyEvent->GetId()));
340 }
341
StopPostTaskEvent()342 void BytraceAdapter::StopPostTaskEvent()
343 {
344 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
345 }
346
StartSocketHandle(int32_t msgId)347 void BytraceAdapter::StartSocketHandle(int32_t msgId)
348 {
349 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "socketMsgHandle msgId:" + std::to_string(msgId));
350 }
351
StopSocketHandle()352 void BytraceAdapter::StopSocketHandle()
353 {
354 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
355 }
356
StartDevListener(const std::string & type,int32_t deviceId)357 void BytraceAdapter::StartDevListener(const std::string& type, int32_t deviceId)
358 {
359 StartTrace(HITRACE_TAG_MULTIMODALINPUT,
360 "device listener type:" + type + ", deviceid:" + std::to_string(deviceId));
361 }
362
StopDevListener()363 void BytraceAdapter::StopDevListener()
364 {
365 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
366 }
367
StartLaunchAbility(int32_t type,const std::string & bundleName)368 void BytraceAdapter::StartLaunchAbility(int32_t type, const std::string& bundleName)
369 {
370 StartTrace(HITRACE_TAG_MULTIMODALINPUT,
371 "launchAbility type:" + std::to_string(type) + ", bundleName:" + bundleName);
372 }
373
StopLaunchAbility()374 void BytraceAdapter::StopLaunchAbility()
375 {
376 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
377 }
378
StartMarkedTracker(int32_t eventId)379 void BytraceAdapter::StartMarkedTracker(int32_t eventId)
380 {
381 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "markProcessed eventId:" + std::to_string(eventId));
382 }
383
StopMarkedTracker()384 void BytraceAdapter::StopMarkedTracker()
385 {
386 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
387 }
388
StartTouchEvent(int32_t pointerId)389 void BytraceAdapter::StartTouchEvent(int32_t pointerId)
390 {
391 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "startTouchEvent pointerId:" + std::to_string(pointerId));
392 }
393
StopTouchEvent()394 void BytraceAdapter::StopTouchEvent()
395 {
396 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
397 }
398
StartToolType(int32_t toolType)399 void BytraceAdapter::StartToolType(int32_t toolType)
400 {
401 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "current ToolType:" + std::to_string(toolType));
402 }
403
StopToolType()404 void BytraceAdapter::StopToolType()
405 {
406 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
407 }
408
StartTouchUp(int32_t pointerId)409 void BytraceAdapter::StartTouchUp(int32_t pointerId)
410 {
411 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "startTouchUp pointerId:" + std::to_string(pointerId));
412 }
413
StopTouchUp()414 void BytraceAdapter::StopTouchUp()
415 {
416 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
417 }
418
StartUpdateDisplayMode(const std::string & modeMsg)419 void BytraceAdapter::StartUpdateDisplayMode(const std::string &modeMsg)
420 {
421 StartTrace(HITRACE_TAG_MULTIMODALINPUT, modeMsg);
422 }
423
StopUpdateDisplayMode()424 void BytraceAdapter::StopUpdateDisplayMode()
425 {
426 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
427 }
428
StartDataShare(const std::string & key)429 void BytraceAdapter::StartDataShare(const std::string &key)
430 {
431 StartTrace(HITRACE_TAG_MULTIMODALINPUT, key);
432 }
433
StopDataShare()434 void BytraceAdapter::StopDataShare()
435 {
436 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
437 }
438
StartRsSurfaceNode(int32_t displayId)439 void BytraceAdapter::StartRsSurfaceNode(int32_t displayId)
440 {
441 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "pointerWindow displayId:" + std::to_string(displayId));
442 }
443
StopRsSurfaceNode()444 void BytraceAdapter::StopRsSurfaceNode()
445 {
446 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
447 }
448
StartFoldState(bool state)449 void BytraceAdapter::StartFoldState(bool state)
450 {
451 std::string foldState = state ? "true" : "false";
452 StartTrace(HITRACE_TAG_MULTIMODALINPUT, foldState);
453 }
454
StopFoldState()455 void BytraceAdapter::StopFoldState()
456 {
457 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
458 }
459
StartWindowVisible(int32_t pid)460 void BytraceAdapter::StartWindowVisible(int32_t pid)
461 {
462 StartTrace(HITRACE_TAG_MULTIMODALINPUT, "get visibility window info:" + std::to_string(pid));
463 }
464
StopWindowVisible()465 void BytraceAdapter::StopWindowVisible()
466 {
467 FinishTrace(HITRACE_TAG_MULTIMODALINPUT);
468 }
469 } // namespace MMI
470 } // namespace OHOS