1/* 2 * Copyright (c) 2021-2024 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 <unistd.h> 19 20#include "hisysevent.h" 21 22#include "core/common/ace_engine.h" 23#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE 24#include "res_sched_client.h" 25#include "res_type.h" 26#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE 27 28namespace OHOS::Ace { 29namespace { 30 31constexpr char EVENT_KEY_ERROR_TYPE[] = "ERROR_TYPE"; 32constexpr char EVENT_KEY_UID[] = "UID"; 33constexpr char EVENT_KEY_PID[] = "PID"; 34constexpr char EVENT_KEY_SESSIONID[] = "SESSION_ID"; 35constexpr char EVENT_KEY_PACKAGE_NAME[] = "PACKAGE_NAME"; 36constexpr char EVENT_KEY_PROCESS_NAME[] = "PROCESS_NAME"; 37constexpr char EVENT_KEY_MESSAGE[] = "MSG"; 38constexpr char EVENT_KEY_CMD[] = "CMD"; 39constexpr char EVENT_KEY_REASON[] = "REASON"; 40constexpr char EVENT_KEY_SUMMARY[] = "SUMMARY"; 41constexpr char EVENT_NAME_JS_ERROR[] = "JS_ERROR"; 42constexpr char STATISTIC_DURATION[] = "DURATION"; 43constexpr char EVENT_KEY_STARTTIME[] = "STARTTIME"; 44constexpr char EVENT_KEY_VERSION_CODE[] = "VERSION_CODE"; 45constexpr char EVENT_KEY_VERSION_NAME[] = "VERSION_NAME"; 46constexpr char EVENT_KEY_BUNDLE_NAME[] = "BUNDLE_NAME"; 47constexpr char EVENT_KEY_ABILITY_NAME[] = "ABILITY_NAME"; 48constexpr char EVENT_KEY_PAGE_URL[] = "PAGE_URL"; 49constexpr char EVENT_KEY_JANK_STATS[] = "JANK_STATS"; 50constexpr char EVENT_KEY_JANK_STATS_VER[] = "JANK_STATS_VER"; 51constexpr char EVENT_KEY_APP_PID[] = "APP_PID"; 52constexpr char EVENT_KEY_SCENE_ID[] = "SCENE_ID"; 53constexpr char EVENT_KEY_INPUT_TIME[] = "INPUT_TIME"; 54constexpr char EVENT_KEY_ANIMATION_START_LATENCY[] = "ANIMATION_START_LATENCY"; 55constexpr char EVENT_KEY_ANIMATION_END_LATENCY[] = "ANIMATION_END_LATENCY"; 56constexpr char EVENT_KEY_E2E_LATENCY[] = "E2E_LATENCY"; 57constexpr char EVENT_KEY_UNIQUE_ID[] = "UNIQUE_ID"; 58constexpr char EVENT_KEY_MODULE_NAME[] = "MODULE_NAME"; 59constexpr char EVENT_KEY_DURITION[] = "DURITION"; 60constexpr char EVENT_KEY_TOTAL_FRAMES[] = "TOTAL_FRAMES"; 61constexpr char EVENT_KEY_TOTAL_MISSED_FRAMES[] = "TOTAL_MISSED_FRAMES"; 62constexpr char EVENT_KEY_MAX_FRAMETIME[] = "MAX_FRAMETIME"; 63constexpr char EVENT_KEY_MAX_FRAMETIME_SINCE_START[] = "MAX_FRAMETIME_SINCE_START"; 64constexpr char EVENT_KEY_MAX_HITCH_TIME[] = "MAX_HITCH_TIME"; 65constexpr char EVENT_KEY_MAX_HITCH_TIME_SINCE_START[] = "MAX_HITCH_TIME_SINCE_START"; 66constexpr char EVENT_KEY_MAX_SEQ_MISSED_FRAMES[] = "MAX_SEQ_MISSED_FRAMES"; 67constexpr char EVENT_KEY_SOURCE_TYPE[] = "SOURCE_TYPE"; 68constexpr char EVENT_KEY_NOTE[] = "NOTE"; 69constexpr char EVENT_KEY_DISPLAY_ANIMATOR[] = "DISPLAY_ANIMATOR"; 70constexpr char EVENT_KEY_SKIPPED_FRAME_TIME[] = "SKIPPED_FRAME_TIME"; 71constexpr char EVENT_KEY_PAGE_NODE_COUNT[] = "PAGE_NODE_COUNT"; 72constexpr char EVENT_KEY_PAGE_NODE_THRESHOLD[] = "PAGE_NODE_THRESHOLD"; 73constexpr char EVENT_KEY_PAGE_DEPTH[] = "PAGE_DEPTH"; 74constexpr char EVENT_KEY_PAGE_DEPTH_THRESHOLD[] = "PAGE_DEPTH_THRESHOLD"; 75constexpr char EVENT_KEY_FUNCTION_NAME[] = "FUNCTION_NAME"; 76constexpr char EVENT_KEY_FUNCTION_EXECUTE_TIME[] = "FUNCTION_EXECUTE_TIME"; 77constexpr char EVENT_KEY_FUNCTION_TIME_THRESHOLD[] = "FUNCTION_TIME_THRESHOLD"; 78constexpr char EVENT_KEY_NOTIFY_HOVER_STATUS_CHANGE[] = "NOTIFY_HOVER_STATUS_CHANGE"; 79constexpr char EVENT_KEY_FOLDER_STATUS[] = "FOLDER_STATUS"; 80constexpr char EVENT_KEY_HOVER_TIME[] = "HOVER_TIME"; 81constexpr char EVENT_KEY_IS_HOVER_MODE[] = "IS_HOVER_MODE"; 82constexpr char EVENT_KEY_APP_ROTATION[] = "APP_ROTATION"; 83constexpr char EVENT_KEY_WINDOW_MODE[] = "WINDOW_MODE"; 84constexpr char EVENT_KEY_NON_MANUAL_POSTCARD_ACTION[] = "NON_MANUAL_POSTCARD_ACTION"; 85constexpr char EVENT_KEY_PAGE_NAME[] = "PAGE_NAME"; 86constexpr char EVENT_KEY_FILTER_TYPE[] = "FILTER_TYPE"; 87constexpr char EVENT_KEY_FORM_NAME[] = "FORM_NAME"; 88constexpr char EVENT_KEY_DIMENSION[] = "DIMENSION"; 89 90constexpr int32_t MAX_PACKAGE_NAME_LENGTH = 128; 91#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE 92constexpr int32_t MAX_JANK_FRAME_TIME = 32; 93#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE 94 95constexpr char DUMP_LOG_COMMAND[] = "B"; 96 97constexpr char CLICK_TITLE_MAXIMIZE_MENU[] = "CLICK_TITLE_MAXIMIZE_MENU"; 98constexpr char DOUBLE_CLICK_TITLE[] = "DOUBLE_CLICK_TITLE"; 99constexpr char CURRENTPKG[] = "CURRENTPKG"; 100constexpr char STATECHANGE[] = "STATECHANGE"; 101constexpr char MAXMENUITEM[] = "MAXMENUITEM"; 102constexpr char SCENE_BOARD_UE_DOMAIN[] = "SCENE_BOARD_UE"; 103#ifdef VSYNC_TIMEOUT_CHECK 104constexpr char UI_VSYNC_TIMEOUT[] = "UI_VSYNC_TIMEOUT"; 105constexpr char EVENT_KEY_WINDOW_ID[] = "WINDOW_ID"; 106constexpr char EVENT_KEY_INSTANCE_ID[] = "INSTANCE_ID"; 107constexpr char EVENT_KEY_VSYNC_TIMESTAMP[] = "VSYNC_TIMESTAMP"; 108#endif 109constexpr char PAGE_NODE_OVERFLOW[] = "PAGE_NODE_OVERFLOW"; 110constexpr char PAGE_DEPTH_OVERFLOW[] = "PAGE_DEPTH_OVERFLOW"; 111constexpr char UI_LIFECIRCLE_FUNCTION_TIMEOUT[] = "UI_LIFECIRCLE_FUNCTION_TIMEOUT"; 112constexpr char UIEXTENSION_TRANSPARENT_DETECTED[] = "UIEXTENSION_TRANSPARENT_DETECTED"; 113 114void StrTrim(std::string& str) 115{ 116 if (str.size() > MAX_PACKAGE_NAME_LENGTH) { 117 str = str.substr(0, MAX_PACKAGE_NAME_LENGTH); 118 } 119} 120 121} // namespace 122 123void EventReport::SendEvent(const EventInfo& eventInfo) 124{ 125 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 126 if (packageName.size() > MAX_PACKAGE_NAME_LENGTH) { 127 StrTrim(packageName); 128 } 129 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventInfo.eventType, 130 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 131 EVENT_KEY_ERROR_TYPE, eventInfo.errorType, 132 EVENT_KEY_PACKAGE_NAME, packageName); 133} 134 135void EventReport::SendJsCardRenderTimeEvent( 136 const std::string& sessionID, 137 const std::string& timeType, 138 uint64_t timeDelay) 139{ 140 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, timeType, 141 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC, 142 EVENT_KEY_SESSIONID, sessionID, 143 STATISTIC_DURATION, timeDelay); 144} 145 146void EventReport::SendAppStartException(AppStartExcepType type) 147{ 148 EventInfo eventInfo = { 149 .eventType = EXCEPTION_FRAMEWORK_APP_START, 150 .errorType = static_cast<int32_t>(type), 151 }; 152 153 SendEventInner(eventInfo); 154} 155 156void EventReport::SendPageRouterException(PageRouterExcepType type, const std::string& pageUrl) 157{ 158 EventInfo eventInfo = { 159 .eventType = EXCEPTION_FRAMEWORK_PAGE_ROUTER, 160 .errorType = static_cast<int32_t>(type), 161 .pageUrl = pageUrl, 162 }; 163 164 SendEventInner(eventInfo); 165} 166 167void EventReport::SendComponentException(ComponentExcepType type) 168{ 169 EventInfo eventInfo = { 170 .eventType = EXCEPTION_COMPONENT, 171 .errorType = static_cast<int32_t>(type), 172 }; 173 174 SendEventInner(eventInfo); 175} 176 177void EventReport::SendAPIChannelException(APIChannelExcepType type) 178{ 179 EventInfo eventInfo = { 180 .eventType = EXCEPTION_API_CHANNEL, 181 .errorType = static_cast<int32_t>(type), 182 }; 183 184 SendEventInner(eventInfo); 185} 186 187void EventReport::SendRenderException(RenderExcepType type) 188{ 189 EventInfo eventInfo = { 190 .eventType = EXCEPTION_RENDER, 191 .errorType = static_cast<int32_t>(type), 192 }; 193 194 SendEventInner(eventInfo); 195} 196 197void EventReport::SendJsException(JsExcepType type) 198{ 199 EventInfo eventInfo = { 200 .eventType = EXCEPTION_JS, 201 .errorType = static_cast<int32_t>(type), 202 }; 203 204 SendEventInner(eventInfo); 205} 206 207void EventReport::SendAnimationException(AnimationExcepType type) 208{ 209 EventInfo eventInfo = { 210 .eventType = EXCEPTION_ANIMATION, 211 .errorType = static_cast<int32_t>(type), 212 }; 213 214 SendEventInner(eventInfo); 215} 216 217void EventReport::SendEventException(EventExcepType type) 218{ 219 EventInfo eventInfo = { 220 .eventType = EXCEPTION_EVENT, 221 .errorType = static_cast<int32_t>(type), 222 }; 223 224 SendEventInner(eventInfo); 225} 226 227void EventReport::SendInternalException(InternalExcepType type) 228{ 229 EventInfo eventInfo = { 230 .eventType = EXCEPTION_INTERNATIONALIZATION, 231 .errorType = static_cast<int32_t>(type), 232 }; 233 234 SendEventInner(eventInfo); 235} 236 237void EventReport::SendAccessibilityException(AccessibilityExcepType type) 238{ 239 EventInfo eventInfo = { 240 .eventType = EXCEPTION_ACCESSIBILITY, 241 .errorType = static_cast<int32_t>(type), 242 }; 243 244 SendEventInner(eventInfo); 245} 246 247void EventReport::SendFormException(FormExcepType type) 248{ 249 EventInfo eventInfo = { 250 .eventType = EXCEPTION_FORM, 251 .errorType = static_cast<int32_t>(type), 252 }; 253 254 SendEventInner(eventInfo); 255} 256 257#ifdef VSYNC_TIMEOUT_CHECK 258void EventReport::SendVsyncException(VsyncExcepType type, uint32_t windowId, int32_t instanceId, uint64_t timeStamp) 259{ 260 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 261 StrTrim(packageName); 262 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, UI_VSYNC_TIMEOUT, 263 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 264 EVENT_KEY_ERROR_TYPE, static_cast<int32_t>(type), 265 EVENT_KEY_PACKAGE_NAME, packageName, 266 EVENT_KEY_WINDOW_ID, windowId, 267 EVENT_KEY_INSTANCE_ID, instanceId, 268 EVENT_KEY_VSYNC_TIMESTAMP, timeStamp); 269} 270#endif 271 272void EventReport::JsEventReport(int32_t eventType, const std::string& jsonStr) 273{ 274 if (!JsonUtil::ParseJsonString(jsonStr)) { 275 LOGE("jsonStr is not a JsonArray."); 276 return; 277 } 278} 279 280void EventReport::JsErrReport( 281 const std::string& packageName, const std::string& reason, const std::string& summary) 282{ 283 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, EVENT_NAME_JS_ERROR, 284 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 285 EVENT_KEY_PACKAGE_NAME, packageName, 286 EVENT_KEY_REASON, reason, 287 EVENT_KEY_SUMMARY, summary); 288} 289 290void EventReport::ANRRawReport(RawEventType type, int32_t uid, const std::string& packageName, 291 const std::string& processName, const std::string& msg) 292{ 293 int32_t pid = getpid(); 294 std::string cmd = " "; 295 std::string eventName = ""; 296 if (type == RawEventType::WARNING) { 297 eventName = "UI_BLOCK_3S"; 298 cmd = "p=" + std::to_string(pid); 299 } else if (type == RawEventType::FREEZE) { 300 eventName = "UI_BLOCK_6S"; 301 cmd = DUMP_LOG_COMMAND; 302 } else { 303 eventName = "UI_BLOCK_RECOVERED"; 304 } 305 std::string uidStr = std::to_string(uid); 306 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 307 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 308 EVENT_KEY_UID, uidStr, 309 EVENT_KEY_PACKAGE_NAME, packageName, 310 EVENT_KEY_PROCESS_NAME, processName, 311 EVENT_KEY_MESSAGE, msg, 312 EVENT_KEY_CMD, cmd); 313} 314 315void EventReport::ANRShowDialog(int32_t uid, const std::string& packageName, 316 const std::string& processName, const std::string& msg) 317{ 318 int32_t pid = getpid(); 319 std::string eventName = "UI_BLOCK_DIALOG"; 320 std::string uidStr = std::to_string(uid); 321 std::string pidStr = std::to_string(pid); 322 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 323 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 324 EVENT_KEY_UID, uidStr, 325 EVENT_KEY_PID, pidStr, 326 EVENT_KEY_PACKAGE_NAME, packageName, 327 EVENT_KEY_PROCESS_NAME, processName, 328 EVENT_KEY_MESSAGE, msg); 329} 330 331void EventReport::JankFrameReport(int64_t startTime, int64_t duration, const std::vector<uint16_t>& jank, 332 const std::string& pageUrl, uint32_t jankStatusVersion) 333{ 334 std::string eventName = "JANK_STATS_APP"; 335 auto app_version_code = AceApplicationInfo::GetInstance().GetAppVersionCode(); 336 auto app_version_name = AceApplicationInfo::GetInstance().GetAppVersionName(); 337 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 338 auto abilityName = AceApplicationInfo::GetInstance().GetAbilityName(); 339 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 340 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC, 341 EVENT_KEY_STARTTIME, startTime, 342 STATISTIC_DURATION, duration, 343 EVENT_KEY_VERSION_CODE, app_version_code, 344 EVENT_KEY_VERSION_NAME, app_version_name, 345 EVENT_KEY_BUNDLE_NAME, packageName, 346 EVENT_KEY_ABILITY_NAME, abilityName, 347 EVENT_KEY_PAGE_URL, pageUrl, 348 EVENT_KEY_JANK_STATS, jank, 349 EVENT_KEY_JANK_STATS_VER, jankStatusVersion); 350} 351 352void EventReport::SendEventInner(const EventInfo& eventInfo) 353{ 354 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 355 StrTrim(packageName); 356 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventInfo.eventType, 357 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 358 EVENT_KEY_ERROR_TYPE, eventInfo.errorType, 359 EVENT_KEY_PACKAGE_NAME, packageName); 360} 361 362void EventReport::ReportEventComplete(DataBase& data) 363{ 364 std::string eventName = "INTERACTION_COMPLETED_LATENCY"; 365 const auto& appPid = data.baseInfo.pid; 366 const auto& bundleName = data.baseInfo.bundleName; 367 const auto& processName = data.baseInfo.processName; 368 const auto& abilityName = data.baseInfo.abilityName; 369 const auto& pageUrl = data.baseInfo.pageUrl; 370 const auto& versionCode = data.baseInfo.versionCode; 371 const auto& versionName = data.baseInfo.versionName; 372 const auto& pageName = data.baseInfo.pageName; 373 const auto& sceneId = data.sceneId; 374 const auto& sourceType = GetSourceTypeName(data.sourceType); 375 auto inputTime = data.inputTime; 376 ConvertRealtimeToSystime(data.inputTime, inputTime); 377 const auto& animationStartLantency = (data.beginVsyncTime - data.inputTime) / NS_TO_MS; 378 const auto& animationEndLantency = (data.endVsyncTime - data.beginVsyncTime) / NS_TO_MS; 379 const auto& e2eLatency = animationStartLantency + animationEndLantency; 380 const auto& note = data.baseInfo.note; 381 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 382 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 383 EVENT_KEY_APP_PID, appPid, 384 EVENT_KEY_BUNDLE_NAME, bundleName, 385 EVENT_KEY_PROCESS_NAME, processName, 386 EVENT_KEY_ABILITY_NAME, abilityName, 387 EVENT_KEY_PAGE_URL, pageUrl, 388 EVENT_KEY_VERSION_CODE, versionCode, 389 EVENT_KEY_VERSION_NAME, versionName, 390 EVENT_KEY_PAGE_NAME, pageName, 391 EVENT_KEY_SCENE_ID, sceneId, 392 EVENT_KEY_SOURCE_TYPE, sourceType, 393 EVENT_KEY_INPUT_TIME, static_cast<uint64_t>(inputTime), 394 EVENT_KEY_ANIMATION_START_LATENCY, static_cast<uint64_t>(animationStartLantency), 395 EVENT_KEY_ANIMATION_END_LATENCY, static_cast<uint64_t>(animationEndLantency), 396 EVENT_KEY_E2E_LATENCY, static_cast<uint64_t>(e2eLatency), 397 EVENT_KEY_NOTE, note); 398 ACE_SCOPED_TRACE("INTERACTION_COMPLETED_LATENCY: sceneId =%s, inputTime=%lld(ms)," 399 "e2eLatency=%lld(ms)", sceneId.c_str(), 400 static_cast<long long>(inputTime), static_cast<long long>(e2eLatency)); 401} 402 403#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE 404void EventReport::ReportAppFrameDropToRss(const bool isInteractionJank, const std::string &bundleName, 405 const int64_t maxFrameTime) 406{ 407 uint32_t eventType = ResourceSchedule::ResType::RES_TYPE_APP_FRAME_DROP; 408 int32_t subType = isInteractionJank ? ResourceSchedule::ResType::AppFrameDropType::INTERACTION_APP_JANK 409 : ResourceSchedule::ResType::AppFrameDropType::JANK_FRAME_APP; 410 std::unordered_map<std::string, std::string> payload = { 411 { "bundleName", bundleName }, 412 { "maxFrameTime", std::to_string(maxFrameTime) }, 413 }; 414 ResourceSchedule::ResSchedClient::GetInstance().ReportData(eventType, subType, payload); 415} 416#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE 417 418void EventReport::ReportEventJankFrame(DataBase& data) 419{ 420 std::string eventName = "INTERACTION_APP_JANK"; 421 const auto& uniqueId = data.beginVsyncTime / NS_TO_MS; 422 const auto& sceneId = data.sceneId; 423 const auto& bundleName = data.baseInfo.bundleName; 424 const auto& processName = data.baseInfo.processName; 425 const auto& abilityName = data.baseInfo.abilityName; 426 auto startTime = data.beginVsyncTime; 427 ConvertRealtimeToSystime(data.beginVsyncTime, startTime); 428 const auto& durition = (data.endVsyncTime - data.beginVsyncTime) / NS_TO_MS; 429 const auto& totalFrames = data.totalFrames; 430 const auto& totalMissedFrames = data.totalMissed; 431 const auto& maxFrameTime = data.maxFrameTime / NS_TO_MS; 432 const auto& maxFrameTimeSinceStart = data.maxFrameTimeSinceStart; 433 const auto& maxHitchTime = data.maxHitchTime; 434 const auto& maxHitchTimeSinceStart = data.maxHitchTimeSinceStart; 435 const auto& maxSeqMissedFrames = data.maxSuccessiveFrames; 436 const auto& note = data.baseInfo.note; 437 const auto& isDisplayAnimator = data.isDisplayAnimator; 438 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 439 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 440 EVENT_KEY_UNIQUE_ID, static_cast<int32_t>(uniqueId), 441 EVENT_KEY_SCENE_ID, sceneId, 442 EVENT_KEY_PROCESS_NAME, processName, 443 EVENT_KEY_MODULE_NAME, bundleName, 444 EVENT_KEY_ABILITY_NAME, abilityName, 445 EVENT_KEY_PAGE_URL, data.baseInfo.pageUrl, 446 EVENT_KEY_VERSION_CODE, data.baseInfo.versionCode, 447 EVENT_KEY_VERSION_NAME, data.baseInfo.versionName, 448 EVENT_KEY_PAGE_NAME, data.baseInfo.pageName, 449 EVENT_KEY_STARTTIME, static_cast<uint64_t>(startTime), 450 EVENT_KEY_DURITION, static_cast<uint64_t>(durition), 451 EVENT_KEY_TOTAL_FRAMES, totalFrames, 452 EVENT_KEY_TOTAL_MISSED_FRAMES, totalMissedFrames, 453 EVENT_KEY_MAX_FRAMETIME, static_cast<uint64_t>(maxFrameTime), 454 EVENT_KEY_MAX_FRAMETIME_SINCE_START, static_cast<uint64_t>(maxFrameTimeSinceStart), 455 EVENT_KEY_MAX_HITCH_TIME, static_cast<uint64_t>(maxHitchTime), 456 EVENT_KEY_MAX_HITCH_TIME_SINCE_START, static_cast<uint64_t>(maxHitchTimeSinceStart), 457 EVENT_KEY_MAX_SEQ_MISSED_FRAMES, maxSeqMissedFrames, 458 EVENT_KEY_NOTE, note, 459 EVENT_KEY_DISPLAY_ANIMATOR, isDisplayAnimator); 460 ACE_SCOPED_TRACE("INTERACTION_APP_JANK: sceneId =%s, startTime=%lld(ms)," 461 "maxFrameTime=%lld(ms)", sceneId.c_str(), 462 static_cast<long long>(startTime), static_cast<long long>(maxFrameTime)); 463#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE 464 if (isDisplayAnimator && maxFrameTime > MAX_JANK_FRAME_TIME) { 465 ReportAppFrameDropToRss(true, bundleName, maxFrameTime); 466 } 467#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE 468} 469 470void EventReport::ReportJankFrameApp(JankInfo& info) 471{ 472 std::string eventName = "JANK_FRAME_APP"; 473 const auto& bundleName = info.baseInfo.bundleName; 474 const auto& processName = info.baseInfo.processName; 475 const auto& abilityName = info.baseInfo.abilityName; 476 const auto& pageUrl = info.baseInfo.pageUrl; 477 const auto& versionCode = info.baseInfo.versionCode; 478 const auto& versionName = info.baseInfo.versionName; 479 const auto& pageName = info.baseInfo.pageName; 480 const auto& skippedFrameTime = info.skippedFrameTime; 481 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 482 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 483 EVENT_KEY_PROCESS_NAME, processName, 484 EVENT_KEY_MODULE_NAME, bundleName, 485 EVENT_KEY_ABILITY_NAME, abilityName, 486 EVENT_KEY_PAGE_URL, pageUrl, 487 EVENT_KEY_VERSION_CODE, versionCode, 488 EVENT_KEY_VERSION_NAME, versionName, 489 EVENT_KEY_PAGE_NAME, pageName, 490 EVENT_KEY_SKIPPED_FRAME_TIME, static_cast<uint64_t>(skippedFrameTime)); 491 ACE_SCOPED_TRACE("JANK_FRAME_APP: skipppedFrameTime=%lld(ms)", static_cast<long long>(skippedFrameTime / NS_TO_MS)); 492#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE 493 ReportAppFrameDropToRss(false, bundleName); 494#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE 495} 496 497void EventReport::ReportJankFrameFiltered(JankInfo& info) 498{ 499 std::string eventName = "JANK_FRAME_FILTERED"; 500 const auto& bundleName = info.baseInfo.bundleName; 501 const auto& processName = info.baseInfo.processName; 502 const auto& abilityName = info.baseInfo.abilityName; 503 const auto& pageUrl = info.baseInfo.pageUrl; 504 const auto& versionCode = info.baseInfo.versionCode; 505 const auto& versionName = info.baseInfo.versionName; 506 const auto& pageName = info.baseInfo.pageName; 507 const auto& skippedFrameTime = info.skippedFrameTime; 508 const auto& windowName = info.windowName; 509 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 510 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 511 EVENT_KEY_PROCESS_NAME, processName, 512 EVENT_KEY_MODULE_NAME, bundleName, 513 EVENT_KEY_ABILITY_NAME, abilityName, 514 EVENT_KEY_PAGE_URL, pageUrl, 515 EVENT_KEY_VERSION_CODE, versionCode, 516 EVENT_KEY_VERSION_NAME, versionName, 517 EVENT_KEY_PAGE_NAME, pageName, 518 EVENT_KEY_SKIPPED_FRAME_TIME, static_cast<uint64_t>(skippedFrameTime)); 519 ACE_SCOPED_TRACE("JANK_FRAME_FILTERED: skipppedFrameTime=%lld(ms), windowName=%s", 520 static_cast<long long>(skippedFrameTime / NS_TO_MS), windowName.c_str()); 521} 522 523void EventReport::ReportJankFrameUnFiltered(JankInfo& info) 524{ 525 std::string eventName = "JANK_FRAME_UNFILTERED"; 526 const auto& bundleName = info.baseInfo.bundleName; 527 const auto& processName = info.baseInfo.processName; 528 const auto& abilityName = info.baseInfo.abilityName; 529 const auto& pageUrl = info.baseInfo.pageUrl; 530 const auto& versionCode = info.baseInfo.versionCode; 531 const auto& versionName = info.baseInfo.versionName; 532 const auto& pageName = info.baseInfo.pageName; 533 const auto& skippedFrameTime = info.skippedFrameTime; 534 const auto& windowName = info.windowName; 535 const auto& filterType = info.filterType; 536 const auto& sceneId = info.sceneId; 537 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventName, 538 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 539 EVENT_KEY_PROCESS_NAME, processName, 540 EVENT_KEY_MODULE_NAME, bundleName, 541 EVENT_KEY_ABILITY_NAME, abilityName, 542 EVENT_KEY_PAGE_URL, pageUrl, 543 EVENT_KEY_VERSION_CODE, versionCode, 544 EVENT_KEY_VERSION_NAME, versionName, 545 EVENT_KEY_PAGE_NAME, pageName, 546 EVENT_KEY_FILTER_TYPE, filterType, 547 EVENT_KEY_SCENE_ID, sceneId, 548 EVENT_KEY_SKIPPED_FRAME_TIME, static_cast<uint64_t>(skippedFrameTime)); 549 ACE_SCOPED_TRACE("JANK_FRAME_UNFILTERED: skipppedFrameTime=%lld(ms), windowName=%s, filterType=%d", 550 static_cast<long long>(skippedFrameTime / NS_TO_MS), windowName.c_str(), filterType); 551} 552 553void EventReport::ReportPageShowMsg(const std::string& pageUrl, const std::string& bundleName, 554 const std::string& pageName) 555{ 556 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, "APP_PAGE_INFO_UPDATE", 557 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 558 EVENT_KEY_PAGE_URL, pageUrl, EVENT_KEY_BUNDLE_NAME, bundleName, 559 EVENT_KEY_PAGE_NAME, pageName); 560} 561 562void EventReport::ReportDoubleClickTitle(int32_t stateChange) 563{ 564 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 565 StrTrim(packageName); 566 HiSysEventWrite(SCENE_BOARD_UE_DOMAIN, DOUBLE_CLICK_TITLE, 567 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 568 CURRENTPKG, packageName, 569 STATECHANGE, stateChange); 570} 571 572void EventReport::ReportClickTitleMaximizeMenu(int32_t maxMenuItem, int32_t stateChange) 573{ 574 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 575 StrTrim(packageName); 576 HiSysEventWrite(SCENE_BOARD_UE_DOMAIN, CLICK_TITLE_MAXIMIZE_MENU, 577 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 578 CURRENTPKG, packageName, 579 MAXMENUITEM, maxMenuItem, 580 STATECHANGE, stateChange); 581} 582 583void EventReport::ReportPageNodeOverflow(const std::string& pageUrl, int32_t nodeCount, int32_t threshold) 584{ 585 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 586 StrTrim(packageName); 587 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, PAGE_NODE_OVERFLOW, 588 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 589 EVENT_KEY_PACKAGE_NAME, packageName, 590 EVENT_KEY_PAGE_URL, pageUrl, 591 EVENT_KEY_PAGE_NODE_COUNT, nodeCount, 592 EVENT_KEY_PAGE_NODE_THRESHOLD, threshold); 593} 594 595void EventReport::ReportPageDepthOverflow(const std::string& pageUrl, int32_t depth, int32_t threshold) 596{ 597 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 598 StrTrim(packageName); 599 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, PAGE_DEPTH_OVERFLOW, 600 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 601 EVENT_KEY_PACKAGE_NAME, packageName, 602 EVENT_KEY_PAGE_URL, pageUrl, 603 EVENT_KEY_PAGE_DEPTH, depth, 604 EVENT_KEY_PAGE_DEPTH_THRESHOLD, threshold); 605} 606 607void EventReport::ReportFunctionTimeout(const std::string& functionName, int64_t time, int32_t threshold) 608{ 609 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 610 StrTrim(packageName); 611 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, UI_LIFECIRCLE_FUNCTION_TIMEOUT, 612 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 613 EVENT_KEY_PACKAGE_NAME, packageName, 614 EVENT_KEY_FUNCTION_NAME, functionName, 615 EVENT_KEY_FUNCTION_EXECUTE_TIME, time, 616 EVENT_KEY_FUNCTION_TIME_THRESHOLD, threshold); 617} 618 619void EventReport::ReportHoverStatusChange( 620 int32_t foldStatus, int32_t time, bool isHoverMode, int32_t appRotation, int32_t windowMode) 621{ 622 auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); 623 auto abilityName = AceApplicationInfo::GetInstance().GetAbilityName(); 624 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, EVENT_KEY_NOTIFY_HOVER_STATUS_CHANGE, 625 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 626 EVENT_KEY_BUNDLE_NAME, packageName, 627 EVENT_KEY_ABILITY_NAME, abilityName, 628 EVENT_KEY_FOLDER_STATUS, foldStatus, 629 EVENT_KEY_HOVER_TIME, time, 630 EVENT_KEY_IS_HOVER_MODE, isHoverMode, 631 EVENT_KEY_WINDOW_MODE, windowMode, 632 EVENT_KEY_APP_ROTATION, appRotation); 633} 634 635void EventReport::ReportNonManualPostCardActionInfo(const std::string& formName, const std::string& bundleName, 636 const std::string& abilityName, const std::string& moduleName, int32_t dimension) 637{ 638 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, EVENT_KEY_NON_MANUAL_POSTCARD_ACTION, 639 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 640 EVENT_KEY_FORM_NAME, formName, 641 EVENT_KEY_BUNDLE_NAME, bundleName, 642 EVENT_KEY_ABILITY_NAME, abilityName, 643 EVENT_KEY_MODULE_NAME, moduleName, 644 EVENT_KEY_DIMENSION, dimension); 645} 646 647void EventReport::ReportUiExtensionTransparentEvent(const std::string& pageUrl, const std::string& bundleName, 648 const std::string& moduleName) 649{ 650 auto app_version_code = AceApplicationInfo::GetInstance().GetAppVersionCode(); 651 auto app_version_name = AceApplicationInfo::GetInstance().GetAppVersionName(); 652 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, UIEXTENSION_TRANSPARENT_DETECTED, 653 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 654 EVENT_KEY_PAGE_NAME, pageUrl, 655 EVENT_KEY_VERSION_CODE, app_version_code, 656 EVENT_KEY_VERSION_NAME, app_version_name, 657 EVENT_KEY_BUNDLE_NAME, bundleName, 658 EVENT_KEY_MODULE_NAME, moduleName); 659} 660} // namespace OHOS::Ace 661