丢帧事件上报rss

Signed-off-by: xufu <xufu7@huawei.com>
This commit is contained in:
xufu 2024-08-23 15:40:14 +08:00
parent bcd3f9143a
commit bc69917e9b
4 changed files with 47 additions and 10 deletions

View File

@ -1,4 +1,4 @@
# Copyright (c) 2021-2023 Huawei Device Co., Ltd.
# Copyright (c) 2021-2024 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
@ -100,6 +100,12 @@ template("ace_osal_ohos_source_set") {
defines += [ "SOC_PERF_ENABLE" ]
}
if (defined(global_parts_info) && defined(
global_parts_info.resourceschedule_resource_schedule_service)) {
external_deps += [ "resource_schedule_service:ressched_client" ]
defines += [ "RESOURCE_SCHEDULE_SERVICE_ENABLE" ]
}
if (defined(resourceschedule_ffrt_support) &&
resourceschedule_ffrt_support) {
sources += [ "long_frame_report_impl.cpp" ]

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Copyright (c) 2021-2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@ -25,6 +25,10 @@
#include "base/json/json_util.h"
#include "core/common/ace_application_info.h"
#include "core/common/ace_engine.h"
#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE
#include "res_sched_client.h"
#include "res_type.h"
#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE
namespace OHOS::Ace {
namespace {
@ -85,6 +89,9 @@ constexpr char EVENT_KEY_WINDOW_MODE[] = "WINDOW_MODE";
constexpr char EVENT_KEY_PAGE_NAME[] = "PAGE_NAME";
constexpr int32_t MAX_PACKAGE_NAME_LENGTH = 128;
#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE
constexpr int32_t MAX_JANK_FRAME_TIME = 32;
#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE
constexpr char DUMP_LOG_COMMAND[] = "B";
@ -393,6 +400,21 @@ void EventReport::ReportEventComplete(DataBase& data)
static_cast<long long>(inputTime), static_cast<long long>(e2eLatency));
}
#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE
void EventReport::ReportAppFrameDropToRss(const bool isInteractionJank, const std::string &bundleName,
const int64_t maxFrameTime)
{
uint32_t eventType = ResourceSchedule::ResType::RES_TYPE_APP_FRAME_DROP;
int32_t subType = isInteractionJank ? ResourceSchedule::ResType::AppFrameDropType::INTERACTION_APP_JANK
: ResourceSchedule::ResType::AppFrameDropType::JANK_FRAME_APP;
std::unordered_map<std::string, std::string> payload = {
{ "bundleName", bundleName },
{ "maxFrameTime", std::to_string(maxFrameTime) },
};
ResourceSchedule::ResSchedClient::GetInstance().ReportData(eventType, subType, payload);
}
#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE
void EventReport::ReportEventJankFrame(DataBase& data)
{
std::string eventName = "INTERACTION_APP_JANK";
@ -401,10 +423,6 @@ void EventReport::ReportEventJankFrame(DataBase& data)
const auto& bundleName = data.baseInfo.bundleName;
const auto& processName = data.baseInfo.processName;
const auto& abilityName = data.baseInfo.abilityName;
const auto& pageUrl = data.baseInfo.pageUrl;
const auto& versionCode = data.baseInfo.versionCode;
const auto& versionName = data.baseInfo.versionName;
const auto& pageName = data.baseInfo.pageName;
auto startTime = data.beginVsyncTime;
ConvertRealtimeToSystime(data.beginVsyncTime, startTime);
const auto& durition = (data.endVsyncTime - data.beginVsyncTime) / NS_TO_MS;
@ -424,10 +442,10 @@ void EventReport::ReportEventJankFrame(DataBase& data)
EVENT_KEY_PROCESS_NAME, processName,
EVENT_KEY_MODULE_NAME, bundleName,
EVENT_KEY_ABILITY_NAME, abilityName,
EVENT_KEY_PAGE_URL, pageUrl,
EVENT_KEY_VERSION_CODE, versionCode,
EVENT_KEY_VERSION_NAME, versionName,
EVENT_KEY_PAGE_NAME, pageName,
EVENT_KEY_PAGE_URL, data.baseInfo.pageUrl,
EVENT_KEY_VERSION_CODE, data.baseInfo.versionCode,
EVENT_KEY_VERSION_NAME, data.baseInfo.versionName,
EVENT_KEY_PAGE_NAME, data.baseInfo.pageName,
EVENT_KEY_STARTTIME, static_cast<uint64_t>(startTime),
EVENT_KEY_DURITION, static_cast<uint64_t>(durition),
EVENT_KEY_TOTAL_FRAMES, totalFrames,
@ -442,6 +460,11 @@ void EventReport::ReportEventJankFrame(DataBase& data)
ACE_SCOPED_TRACE("INTERACTION_APP_JANK: sceneId =%s, startTime=%lld(ms),"
"maxFrameTime=%lld(ms)", sceneId.c_str(),
static_cast<long long>(startTime), static_cast<long long>(maxFrameTime));
#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE
if (isDisplayAnimator && maxFrameTime > MAX_JANK_FRAME_TIME) {
ReportAppFrameDropToRss(true, bundleName, maxFrameTime);
}
#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE
}
void EventReport::ReportJankFrameApp(JankInfo& info)
@ -466,6 +489,9 @@ void EventReport::ReportJankFrameApp(JankInfo& info)
EVENT_KEY_PAGE_NAME, pageName,
EVENT_KEY_SKIPPED_FRAME_TIME, static_cast<uint64_t>(skippedFrameTime));
ACE_SCOPED_TRACE("JANK_FRAME_APP: skipppedFrameTime=%lld(ms)", static_cast<long long>(skippedFrameTime / NS_TO_MS));
#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE
ReportAppFrameDropToRss(false, bundleName);
#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE
}
void EventReport::ReportJankFrameFiltered(JankInfo& info)

View File

@ -103,6 +103,7 @@
"zlib",
"skia",
"libuv",
"resource_schedule_service",
"background_task_mgr",
"egl"
],

View File

@ -199,6 +199,10 @@ public:
private:
static void SendEventInner(const EventInfo& eventInfo);
#ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE
static void ReportAppFrameDropToRss(const bool isInteractionJank, const std::string &bundleName,
const int64_t maxFrameTime = 0);
#endif // RESOURCE_SCHEDULE_SERVICE_ENABLE
};
} // namespace OHOS::Ace