• 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 "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