1 /*
2 * Copyright (c) 2021 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 "base/log/event_report.h"
17
18 #include <ctime>
19 #include <string>
20 #include <unistd.h>
21
22 #include "hisysevent.h"
23
24 #include "base/log/ace_trace.h"
25 #include "base/json/json_util.h"
26 #include "core/common/ace_application_info.h"
27 #include "core/common/ace_engine.h"
28
29 namespace OHOS::Ace {
30 namespace {
31
32 constexpr char EVENT_KEY_ERROR_TYPE[] = "ERROR_TYPE";
33 constexpr char EVENT_KEY_UID[] = "UID";
34 constexpr char EVENT_KEY_PID[] = "PID";
35 constexpr char EVENT_KEY_SESSIONID[] = "SESSION_ID";
36 constexpr char EVENT_KEY_PACKAGE_NAME[] = "PACKAGE_NAME";
37 constexpr char EVENT_KEY_PROCESS_NAME[] = "PROCESS_NAME";
38 constexpr char EVENT_KEY_MESSAGE[] = "MSG";
39 constexpr char EVENT_KEY_CMD[] = "CMD";
40 constexpr char EVENT_KEY_REASON[] = "REASON";
41 constexpr char EVENT_KEY_SUMMARY[] = "SUMMARY";
42 constexpr char EVENT_NAME_JS_ERROR[] = "JS_ERROR";
43 constexpr char STATISTIC_DURATION[] = "DURATION";
44 constexpr char EVENT_KEY_STARTTIME[] = "STARTTIME";
45 constexpr char EVENT_KEY_VERSION_CODE[] = "VERSION_CODE";
46 constexpr char EVENT_KEY_VERSION_NAME[] = "VERSION_NAME";
47 constexpr char EVENT_KEY_BUNDLE_NAME[] = "BUNDLE_NAME";
48 constexpr char EVENT_KEY_ABILITY_NAME[] = "ABILITY_NAME";
49 constexpr char EVENT_KEY_PAGE_URL[] = "PAGE_URL";
50 constexpr char EVENT_KEY_JANK_STATS[] = "JANK_STATS";
51 constexpr char EVENT_KEY_JANK_STATS_VER[] = "JANK_STATS_VER";
52 constexpr char EVENT_KEY_APP_PID[] = "APP_PID";
53 constexpr char EVENT_KEY_SCENE_ID[] = "SCENE_ID";
54 constexpr char EVENT_KEY_INPUT_TIME[] = "INPUT_TIME";
55 constexpr char EVENT_KEY_ANIMATION_START_LATENCY[] = "ANIMATION_START_LATENCY";
56 constexpr char EVENT_KEY_ANIMATION_END_LATENCY[] = "ANIMATION_END_LATENCY";
57 constexpr char EVENT_KEY_E2E_LATENCY[] = "E2E_LATENCY";
58 constexpr char EVENT_KEY_UNIQUE_ID[] = "UNIQUE_ID";
59 constexpr char EVENT_KEY_MODULE_NAME[] = "MODULE_NAME";
60 constexpr char EVENT_KEY_DURITION[] = "DURITION";
61 constexpr char EVENT_KEY_TOTAL_FRAMES[] = "TOTAL_FRAMES";
62 constexpr char EVENT_KEY_TOTAL_MISSED_FRAMES[] = "TOTAL_MISSED_FRAMES";
63 constexpr char EVENT_KEY_MAX_FRAMETIME[] = "MAX_FRAMETIME";
64 constexpr char EVENT_KEY_MAX_SEQ_MISSED_FRAMES[] = "MAX_SEQ_MISSED_FRAMES";
65 constexpr char EVENT_KEY_SOURCE_TYPE[] = "SOURCE_TYPE";
66 constexpr char EVENT_KEY_NOTE[] = "NOTE";
67 constexpr char EVENT_KEY_DISPLAY_ANIMATOR[] = "DISPLAY_ANIMATOR";
68 constexpr char EVENT_KEY_SKIPPED_FRAME_TIME[] = "SKIPPED_FRAME_TIME";
69
70 constexpr int32_t MAX_PACKAGE_NAME_LENGTH = 128;
71
72 constexpr char DUMP_LOG_COMMAND[] = "B";
73
74 constexpr char CLICK_TITLE_MAXIMIZE_MENU[] = "CLICK_TITLE_MAXIMIZE_MENU";
75 constexpr char DOUBLE_CLICK_TITLE[] = "DOUBLE_CLICK_TITLE";
76 constexpr char CURRENTPKG[] = "CURRENTPKG";
77 constexpr char STATECHANGE[] = "STATECHANGE";
78 constexpr char MAXMENUITEM[] = "MAXMENUITEM";
79 constexpr char CHANGEDEFAULTSETTING[] = "CHANGEDEFAULTSETTING";
80 constexpr char SCENE_BOARD_UE_DOMAIN[] = "SCENE_BOARD_UE";
81
StrTrim(std::string & str)82 void StrTrim(std::string& str)
83 {
84 if (str.size() > MAX_PACKAGE_NAME_LENGTH) {
85 str = str.substr(0, MAX_PACKAGE_NAME_LENGTH);
86 }
87 }
88
89 } // namespace
90
SendEvent(const EventInfo & eventInfo)91 void EventReport::SendEvent(const EventInfo& eventInfo)
92 {
93 auto packageName = AceApplicationInfo::GetInstance().GetPackageName();
94 if (packageName.size() > MAX_PACKAGE_NAME_LENGTH) {
95 StrTrim(packageName);
96 }
97 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventInfo.eventType,
98 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
99 EVENT_KEY_ERROR_TYPE, eventInfo.errorType,
100 EVENT_KEY_PACKAGE_NAME, packageName);
101 }
102
SendJsCardRenderTimeEvent(const std::string & sessionID,const std::string & timeType,uint64_t timeDelay)103 void EventReport::SendJsCardRenderTimeEvent(
104 const std::string& sessionID,
105 const std::string& timeType,
106 uint64_t timeDelay)
107 {
108 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, timeType,
109 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
110 EVENT_KEY_SESSIONID, sessionID,
111 STATISTIC_DURATION, timeDelay);
112 }
113
SendAppStartException(AppStartExcepType type)114 void EventReport::SendAppStartException(AppStartExcepType type)
115 {
116 EventInfo eventInfo = {
117 .eventType = EXCEPTION_FRAMEWORK_APP_START,
118 .errorType = static_cast<int32_t>(type),
119 };
120
121 SendEventInner(eventInfo);
122 }
123
SendPageRouterException(PageRouterExcepType type,const std::string & pageUrl)124 void EventReport::SendPageRouterException(PageRouterExcepType type, const std::string& pageUrl)
125 {
126 EventInfo eventInfo = {
127 .eventType = EXCEPTION_FRAMEWORK_PAGE_ROUTER,
128 .errorType = static_cast<int32_t>(type),
129 .pageUrl = pageUrl,
130 };
131
132 SendEventInner(eventInfo);
133 }
134
SendComponentException(ComponentExcepType type)135 void EventReport::SendComponentException(ComponentExcepType type)
136 {
137 EventInfo eventInfo = {
138 .eventType = EXCEPTION_COMPONENT,
139 .errorType = static_cast<int32_t>(type),
140 };
141
142 SendEventInner(eventInfo);
143 }
144
SendAPIChannelException(APIChannelExcepType type)145 void EventReport::SendAPIChannelException(APIChannelExcepType type)
146 {
147 EventInfo eventInfo = {
148 .eventType = EXCEPTION_API_CHANNEL,
149 .errorType = static_cast<int32_t>(type),
150 };
151
152 SendEventInner(eventInfo);
153 }
154
SendRenderException(RenderExcepType type)155 void EventReport::SendRenderException(RenderExcepType type)
156 {
157 EventInfo eventInfo = {
158 .eventType = EXCEPTION_RENDER,
159 .errorType = static_cast<int32_t>(type),
160 };
161
162 SendEventInner(eventInfo);
163 }
164
SendJsException(JsExcepType type)165 void EventReport::SendJsException(JsExcepType type)
166 {
167 EventInfo eventInfo = {
168 .eventType = EXCEPTION_JS,
169 .errorType = static_cast<int32_t>(type),
170 };
171
172 SendEventInner(eventInfo);
173 }
174
SendAnimationException(AnimationExcepType type)175 void EventReport::SendAnimationException(AnimationExcepType type)
176 {
177 EventInfo eventInfo = {
178 .eventType = EXCEPTION_ANIMATION,
179 .errorType = static_cast<int32_t>(type),
180 };
181
182 SendEventInner(eventInfo);
183 }
184
SendEventException(EventExcepType type)185 void EventReport::SendEventException(EventExcepType type)
186 {
187 EventInfo eventInfo = {
188 .eventType = EXCEPTION_EVENT,
189 .errorType = static_cast<int32_t>(type),
190 };
191
192 SendEventInner(eventInfo);
193 }
194
SendInternalException(InternalExcepType type)195 void EventReport::SendInternalException(InternalExcepType type)
196 {
197 EventInfo eventInfo = {
198 .eventType = EXCEPTION_INTERNATIONALIZATION,
199 .errorType = static_cast<int32_t>(type),
200 };
201
202 SendEventInner(eventInfo);
203 }
204
SendAccessibilityException(AccessibilityExcepType type)205 void EventReport::SendAccessibilityException(AccessibilityExcepType type)
206 {
207 EventInfo eventInfo = {
208 .eventType = EXCEPTION_ACCESSIBILITY,
209 .errorType = static_cast<int32_t>(type),
210 };
211
212 SendEventInner(eventInfo);
213 }
214
SendFormException(FormExcepType type)215 void EventReport::SendFormException(FormExcepType type)
216 {
217 EventInfo eventInfo = {
218 .eventType = EXCEPTION_FORM,
219 .errorType = static_cast<int32_t>(type),
220 };
221
222 SendEventInner(eventInfo);
223 }
224
JsEventReport(int32_t eventType,const std::string & jsonStr)225 void EventReport::JsEventReport(int32_t eventType, const std::string& jsonStr)
226 {
227 if (!JsonUtil::ParseJsonString(jsonStr)) {
228 LOGE("jsonStr is not a JsonArray.");
229 return;
230 }
231 }
232
JsErrReport(const std::string & packageName,const std::string & reason,const std::string & summary)233 void EventReport::JsErrReport(
234 const std::string& packageName, const std::string& reason, const std::string& summary)
235 {
236 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, EVENT_NAME_JS_ERROR,
237 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
238 EVENT_KEY_PACKAGE_NAME, packageName,
239 EVENT_KEY_REASON, reason,
240 EVENT_KEY_SUMMARY, summary);
241 }
242
ANRRawReport(RawEventType type,int32_t uid,const std::string & packageName,const std::string & processName,const std::string & msg)243 void EventReport::ANRRawReport(RawEventType type, int32_t uid, const std::string& packageName,
244 const std::string& processName, const std::string& msg)
245 {
246 int32_t pid = getpid();
247 std::string cmd = " ";
248 std::string eventName = "";
249 if (type == RawEventType::WARNING) {
250 eventName = "UI_BLOCK_3S";
251 cmd = "p=" + std::to_string(pid);
252 } else if (type == RawEventType::FREEZE) {
253 eventName = "UI_BLOCK_6S";
254 cmd = DUMP_LOG_COMMAND;
255 } else {
256 eventName = "UI_BLOCK_RECOVERED";
257 }
258 std::string uidStr = std::to_string(uid);
259 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName,
260 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
261 EVENT_KEY_UID, uidStr,
262 EVENT_KEY_PACKAGE_NAME, packageName,
263 EVENT_KEY_PROCESS_NAME, processName,
264 EVENT_KEY_MESSAGE, msg,
265 EVENT_KEY_CMD, cmd);
266 }
267
ANRShowDialog(int32_t uid,const std::string & packageName,const std::string & processName,const std::string & msg)268 void EventReport::ANRShowDialog(int32_t uid, const std::string& packageName,
269 const std::string& processName, const std::string& msg)
270 {
271 int32_t pid = getpid();
272 std::string eventName = "UI_BLOCK_DIALOG";
273 std::string uidStr = std::to_string(uid);
274 std::string pidStr = std::to_string(pid);
275 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName,
276 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
277 EVENT_KEY_UID, uidStr,
278 EVENT_KEY_PID, pidStr,
279 EVENT_KEY_PACKAGE_NAME, packageName,
280 EVENT_KEY_PROCESS_NAME, processName,
281 EVENT_KEY_MESSAGE, msg);
282 }
283
JankFrameReport(int64_t startTime,int64_t duration,const std::vector<uint16_t> & jank,const std::string & pageUrl,uint32_t jankStatusVersion)284 void EventReport::JankFrameReport(int64_t startTime, int64_t duration, const std::vector<uint16_t>& jank,
285 const std::string& pageUrl, uint32_t jankStatusVersion)
286 {
287 std::string eventName = "JANK_STATS_APP";
288 auto app_version_code = AceApplicationInfo::GetInstance().GetAppVersionCode();
289 auto app_version_name = AceApplicationInfo::GetInstance().GetAppVersionName();
290 auto packageName = AceApplicationInfo::GetInstance().GetPackageName();
291 auto abilityName = AceApplicationInfo::GetInstance().GetAbilityName();
292 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName,
293 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
294 EVENT_KEY_STARTTIME, startTime,
295 STATISTIC_DURATION, duration,
296 EVENT_KEY_VERSION_CODE, app_version_code,
297 EVENT_KEY_VERSION_NAME, app_version_name,
298 EVENT_KEY_BUNDLE_NAME, packageName,
299 EVENT_KEY_ABILITY_NAME, abilityName,
300 EVENT_KEY_PAGE_URL, pageUrl,
301 EVENT_KEY_JANK_STATS, jank,
302 EVENT_KEY_JANK_STATS_VER, jankStatusVersion);
303 }
304
SendEventInner(const EventInfo & eventInfo)305 void EventReport::SendEventInner(const EventInfo& eventInfo)
306 {
307 auto packageName = AceApplicationInfo::GetInstance().GetPackageName();
308 StrTrim(packageName);
309 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventInfo.eventType,
310 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
311 EVENT_KEY_ERROR_TYPE, eventInfo.errorType,
312 EVENT_KEY_PACKAGE_NAME, packageName);
313 }
314
ReportEventComplete(DataBase & data)315 void EventReport::ReportEventComplete(DataBase& data)
316 {
317 std::string eventName = "INTERACTION_COMPLETED_LATENCY";
318 const auto& appPid = data.baseInfo.pid;
319 const auto& bundleName = data.baseInfo.bundleName;
320 const auto& processName = data.baseInfo.processName;
321 const auto& abilityName = data.baseInfo.abilityName;
322 const auto& pageUrl = data.baseInfo.pageUrl;
323 const auto& versionCode = data.baseInfo.versionCode;
324 const auto& versionName = data.baseInfo.versionName;
325 const auto& sceneId = data.sceneId;
326 const auto& sourceType = GetSourceTypeName(data.sourceType);
327 auto inputTime = data.inputTime;
328 ConvertRealtimeToSystime(data.inputTime, inputTime);
329 const auto& animationStartLantency = (data.beginVsyncTime - data.inputTime) / NS_TO_MS;
330 const auto& animationEndLantency = (data.endVsyncTime - data.beginVsyncTime) / NS_TO_MS;
331 const auto& e2eLatency = animationStartLantency + animationEndLantency;
332 const auto& note = data.baseInfo.note;
333 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName,
334 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
335 EVENT_KEY_APP_PID, appPid,
336 EVENT_KEY_BUNDLE_NAME, bundleName,
337 EVENT_KEY_PROCESS_NAME, processName,
338 EVENT_KEY_ABILITY_NAME, abilityName,
339 EVENT_KEY_PAGE_URL, pageUrl,
340 EVENT_KEY_VERSION_CODE, versionCode,
341 EVENT_KEY_VERSION_NAME, versionName,
342 EVENT_KEY_SCENE_ID, sceneId,
343 EVENT_KEY_SOURCE_TYPE, sourceType,
344 EVENT_KEY_INPUT_TIME, static_cast<uint64_t>(inputTime),
345 EVENT_KEY_ANIMATION_START_LATENCY, static_cast<uint64_t>(animationStartLantency),
346 EVENT_KEY_ANIMATION_END_LATENCY, static_cast<uint64_t>(animationEndLantency),
347 EVENT_KEY_E2E_LATENCY, static_cast<uint64_t>(e2eLatency),
348 EVENT_KEY_NOTE, note);
349 ACE_SCOPED_TRACE("INTERACTION_COMPLETED_LATENCY: sceneId =%s, inputTime=%lld(ms),"
350 "e2eLatency=%lld(ms)", sceneId.c_str(),
351 static_cast<long long>(inputTime), static_cast<long long>(e2eLatency));
352 }
353
ReportEventJankFrame(DataBase & data)354 void EventReport::ReportEventJankFrame(DataBase& data)
355 {
356 std::string eventName = "INTERACTION_APP_JANK";
357 const auto& uniqueId = data.beginVsyncTime / NS_TO_MS;
358 const auto& sceneId = data.sceneId;
359 const auto& bundleName = data.baseInfo.bundleName;
360 const auto& processName = data.baseInfo.processName;
361 const auto& abilityName = data.baseInfo.abilityName;
362 const auto& pageUrl = data.baseInfo.pageUrl;
363 const auto& versionCode = data.baseInfo.versionCode;
364 const auto& versionName = data.baseInfo.versionName;
365 auto startTime = data.beginVsyncTime;
366 ConvertRealtimeToSystime(data.beginVsyncTime, startTime);
367 const auto& durition = (data.endVsyncTime - data.beginVsyncTime) / NS_TO_MS;
368 const auto& totalFrames = data.totalFrames;
369 const auto& totalMissedFrames = data.totalMissed;
370 const auto& maxFrameTime = data.maxFrameTime / NS_TO_MS;
371 const auto& maxSeqMissedFrames = data.maxSuccessiveFrames;
372 const auto& note = data.baseInfo.note;
373 const auto& isDisplayAnimator = data.isDisplayAnimator;
374 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName,
375 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
376 EVENT_KEY_UNIQUE_ID, static_cast<int32_t>(uniqueId),
377 EVENT_KEY_SCENE_ID, sceneId,
378 EVENT_KEY_PROCESS_NAME, processName,
379 EVENT_KEY_MODULE_NAME, bundleName,
380 EVENT_KEY_ABILITY_NAME, abilityName,
381 EVENT_KEY_PAGE_URL, pageUrl,
382 EVENT_KEY_VERSION_CODE, versionCode,
383 EVENT_KEY_VERSION_NAME, versionName,
384 EVENT_KEY_STARTTIME, static_cast<uint64_t>(startTime),
385 EVENT_KEY_DURITION, static_cast<uint64_t>(durition),
386 EVENT_KEY_TOTAL_FRAMES, totalFrames,
387 EVENT_KEY_TOTAL_MISSED_FRAMES, totalMissedFrames,
388 EVENT_KEY_MAX_FRAMETIME, static_cast<uint64_t>(maxFrameTime),
389 EVENT_KEY_MAX_SEQ_MISSED_FRAMES, maxSeqMissedFrames,
390 EVENT_KEY_NOTE, note,
391 EVENT_KEY_DISPLAY_ANIMATOR, isDisplayAnimator);
392 ACE_SCOPED_TRACE("INTERACTION_APP_JANK: sceneId =%s, startTime=%lld(ms),"
393 "maxFrameTime=%lld(ms)", sceneId.c_str(),
394 static_cast<long long>(startTime), static_cast<long long>(maxFrameTime));
395 }
396
ReportJankFrameApp(JankInfo & info)397 void EventReport::ReportJankFrameApp(JankInfo& info)
398 {
399 std::string eventName = "JANK_FRAME_APP";
400 const auto& bundleName = info.baseInfo.bundleName;
401 const auto& processName = info.baseInfo.processName;
402 const auto& abilityName = info.baseInfo.abilityName;
403 const auto& pageUrl = info.baseInfo.pageUrl;
404 const auto& versionCode = info.baseInfo.versionCode;
405 const auto& versionName = info.baseInfo.versionName;
406 const auto& skippedFrameTime = info.skippedFrameTime;
407 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName,
408 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
409 EVENT_KEY_PROCESS_NAME, processName,
410 EVENT_KEY_MODULE_NAME, bundleName,
411 EVENT_KEY_ABILITY_NAME, abilityName,
412 EVENT_KEY_PAGE_URL, pageUrl,
413 EVENT_KEY_VERSION_CODE, versionCode,
414 EVENT_KEY_VERSION_NAME, versionName,
415 EVENT_KEY_SKIPPED_FRAME_TIME, static_cast<uint64_t>(skippedFrameTime));
416 ACE_SCOPED_TRACE("JANK_FRAME_APP: skipppedFrameTime=%lld(ms)", static_cast<long long>(skippedFrameTime / NS_TO_MS));
417 }
418
ReportJankFrameFiltered(JankInfo & info)419 void EventReport::ReportJankFrameFiltered(JankInfo& info)
420 {
421 std::string eventName = "JANK_FRAME_FILTERED";
422 const auto& bundleName = info.baseInfo.bundleName;
423 const auto& processName = info.baseInfo.processName;
424 const auto& abilityName = info.baseInfo.abilityName;
425 const auto& pageUrl = info.baseInfo.pageUrl;
426 const auto& versionCode = info.baseInfo.versionCode;
427 const auto& versionName = info.baseInfo.versionName;
428 const auto& skippedFrameTime = info.skippedFrameTime;
429 const auto& windowName = info.windowName;
430 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName,
431 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
432 EVENT_KEY_PROCESS_NAME, processName,
433 EVENT_KEY_MODULE_NAME, bundleName,
434 EVENT_KEY_ABILITY_NAME, abilityName,
435 EVENT_KEY_PAGE_URL, pageUrl,
436 EVENT_KEY_VERSION_CODE, versionCode,
437 EVENT_KEY_VERSION_NAME, versionName,
438 EVENT_KEY_SKIPPED_FRAME_TIME, static_cast<uint64_t>(skippedFrameTime));
439 ACE_SCOPED_TRACE("JANK_FRAME_FILTERED: skipppedFrameTime=%lld(ms), windowName=%s",
440 static_cast<long long>(skippedFrameTime / NS_TO_MS), windowName.c_str());
441 }
442
443
ReportDoubleClickTitle(int32_t stateChange)444 void EventReport::ReportDoubleClickTitle(int32_t stateChange)
445 {
446 auto packageName = AceApplicationInfo::GetInstance().GetPackageName();
447 StrTrim(packageName);
448 HiSysEventWrite(SCENE_BOARD_UE_DOMAIN, DOUBLE_CLICK_TITLE,
449 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
450 CURRENTPKG, packageName,
451 STATECHANGE, stateChange);
452 }
453
ReportClickTitleMaximizeMenu(int32_t maxMenuItem,int32_t stateChange)454 void EventReport::ReportClickTitleMaximizeMenu(int32_t maxMenuItem, int32_t stateChange)
455 {
456 auto packageName = AceApplicationInfo::GetInstance().GetPackageName();
457 StrTrim(packageName);
458 HiSysEventWrite(SCENE_BOARD_UE_DOMAIN, CLICK_TITLE_MAXIMIZE_MENU,
459 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
460 CURRENTPKG, packageName,
461 MAXMENUITEM, maxMenuItem,
462 CHANGEDEFAULTSETTING, stateChange);
463 }
464 } // namespace OHOS::Ace
465