• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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