ability_or_page_switch response optimization

Signed-off-by: x00503640 <xufang21@huawei.com>
This commit is contained in:
x00503640 2023-11-13 18:33:08 +08:00
parent c5d4235f8a
commit 7caae9295e
5 changed files with 25 additions and 11 deletions

View File

@ -337,7 +337,7 @@ void EventReport::ReportEventComplete(DataBase& data)
EVENT_KEY_ANIMATION_END_LATENCY, static_cast<uint64_t>(animationEndLantency),
EVENT_KEY_E2E_LATENCY, static_cast<uint64_t>(e2eLatency),
EVENT_KEY_NOTE, note);
ACE_SCOPED_TRACE("INTERACTION_COMPLETED_LATENCY: inputTime(ms)=%lld, e2eLatency(ms)=%lld",
ACE_SCOPED_TRACE("INTERACTION_COMPLETED_LATENCY: inputTime=%lld(ms), e2eLatency=%lld(ms)",
static_cast<long long>(inputTime), static_cast<long long>(e2eLatency));
}
@ -377,7 +377,7 @@ void EventReport::ReportEventJankFrame(DataBase& data)
EVENT_KEY_MAX_FRAMETIME, static_cast<uint64_t>(maxFrameTime),
EVENT_KEY_MAX_SEQ_MISSED_FRAMES, maxSeqMissedFrames,
EVENT_KEY_NOTE, note);
ACE_SCOPED_TRACE("INTERACTION_APP_JANK: inputTime(ms)=%lld, maxFrameTime(ms)=%lld",
ACE_SCOPED_TRACE("INTERACTION_APP_JANK: inputTime=%lld(ms), maxFrameTime=%lld(ms)",
static_cast<long long>(startTime), static_cast<long long>(maxFrameTime));
}
@ -400,6 +400,6 @@ void EventReport::ReportJankFrameApp(JankInfo& info)
EVENT_KEY_VERSION_CODE, versionCode,
EVENT_KEY_VERSION_NAME, versionName,
EVENT_KEY_SKIPPED_FRAME_TIME, static_cast<uint64_t>(skippedFrameTime));
ACE_SCOPED_TRACE("JANK_FRAME_APP: skipppedFrameTime(ms)=%lld", static_cast<long long>(skippedFrameTime / NS_TO_MS));
ACE_SCOPED_TRACE("JANK_FRAME_APP: skipppedFrameTime=%lld(ms)", static_cast<long long>(skippedFrameTime / NS_TO_MS));
}
} // namespace OHOS::Ace

View File

@ -158,6 +158,8 @@ void JankFrameReport::RecordJankStatus(double jank)
frameJankRecord_[GetJankRange(jank)]++;
if (jank >= 6.0f) {
jankFrameCount_++;
ACE_SCOPED_TRACE("JANK_STATS_APP skippedTime=%lld(ms)",
static_cast<long long>(jank * refreshPeriod_ / NS_TO_MS));
ACE_COUNT_TRACE(jankFrameCount_, "JANK FRAME %s", pageUrl_.c_str());
}
PerfMonitor::GetPerfMonitor()->ReportJankFrameApp(jank);

View File

@ -20,6 +20,7 @@
#include "base/log/event_report.h"
#include "base/log/jank_frame_report.h"
#include "base/log/log.h"
#include "base/perfmonitor/perf_constants.h"
#include "base/utils/system_properties.h"
#include "core/common/ace_application_info.h"
#include "render_service_client/core/transaction/rs_interfaces.h"
@ -28,6 +29,7 @@ namespace OHOS::Ace {
using namespace std;
PerfMonitor* PerfMonitor::pMonitor = nullptr;
constexpr int64_t SCENE_TIMEOUT = 10000000000;
constexpr int64_t RESPONSE_TIMEOUT = 1000000000;
constexpr float SINGLE_FRAME_TIME = 16600000;
const int32_t JANK_SKIPPED_THRESHOLD = SystemProperties::GetJankFrameThreshold();
const std::string NO_USER = "NO_USER";
@ -243,7 +245,7 @@ void PerfMonitor::Start(const std::string& sceneId, PerfActionType type, const s
{
AceAsyncTraceBegin(0, sceneId.c_str());
std::lock_guard<std::mutex> Lock(mMutex);
int64_t inputTime = GetInputTime(type, note);
int64_t inputTime = GetInputTime(sceneId, type, note);
SceneRecord* record = GetRecord(sceneId);
if (record != nullptr) {
record->Reset();
@ -278,19 +280,19 @@ void PerfMonitor::RecordInputEvent(PerfActionType type, PerfSourceType sourceTyp
switch (type) {
case LAST_DOWN:
{
ACE_SCOPED_TRACE("RecordInputEvent: last_down(ns)=%lld", static_cast<long long>(time));
ACE_SCOPED_TRACE("RecordInputEvent: last_down=%lld(ns)", static_cast<long long>(time));
mInputTime[LAST_DOWN] = time;
break;
}
case LAST_UP:
{
ACE_SCOPED_TRACE("RecordInputEvent: last_up(ns)=%lld", static_cast<long long>(time));
ACE_SCOPED_TRACE("RecordInputEvent: last_up=%lld(ns)", static_cast<long long>(time));
mInputTime[LAST_UP] = time;
break;
}
case FIRST_MOVE:
{
ACE_SCOPED_TRACE("RecordInputEvent: first_move(ns)=%lld", static_cast<long long>(time));
ACE_SCOPED_TRACE("RecordInputEvent: first_move=%lld(ns)", static_cast<long long>(time));
mInputTime[FIRST_MOVE] = time;
break;
}
@ -373,7 +375,7 @@ void PerfMonitor::RemoveRecord(const std::string& sceneId)
}
}
int64_t PerfMonitor::GetInputTime(PerfActionType type, const std::string& note)
int64_t PerfMonitor::GetInputTime(const std::string& sceneId, PerfActionType type, const std::string& note)
{
int64_t inputTime = 0;
switch (type) {
@ -389,7 +391,7 @@ int64_t PerfMonitor::GetInputTime(PerfActionType type, const std::string& note)
default:
break;
}
if (inputTime <= 0 || note == NO_USER) {
if (inputTime <= 0 || note == NO_USER || IsExceptResponseTime(inputTime, sceneId)) {
ACE_SCOPED_TRACE("GetInputTime: now time");
inputTime = GetCurrentRealTimeNs();
}
@ -460,4 +462,13 @@ void PerfMonitor::ReportPerfEvent(PerfEventType type, DataBase& data)
ReportPerfEventToRS(data);
ReportPerfEventToUI(data);
}
bool PerfMonitor::IsExceptResponseTime(int64_t time, const std::string& sceneId)
{
if (sceneId == PerfConstants::ABILITY_OR_PAGE_SWITCH
&& GetCurrentRealTimeNs() - time > RESPONSE_TIMEOUT) {
return true;
}
return false;
}
} // namespace OHOS::Ace

View File

@ -116,7 +116,7 @@ public:
void Start(const std::string& sceneId, PerfActionType type, const std::string& note);
void End(const std::string& sceneId, bool isRsRender);
void RecordInputEvent(PerfActionType type, PerfSourceType sourceType, int64_t time);
int64_t GetInputTime(PerfActionType type, const std::string& note);
int64_t GetInputTime(const std::string& sceneId, PerfActionType type, const std::string& note);
void SetFrameTime(int64_t vsyncTime, int64_t duration, double jank);
void ReportJankFrameApp(double jank);
void SetPageUrl(const std::string& pageUrl);
@ -132,6 +132,7 @@ private:
void FlushDataBase(SceneRecord* record, DataBase& data, bool needReportToRS);
void ReportPerfEvent(PerfEventType type, DataBase& data);
void RecordBaseInfo(SceneRecord* record);
bool IsExceptResponseTime(int64_t time, const std::string& sceneId);
private:
std::map<PerfActionType, int64_t> mInputTime;
int64_t mVsyncTime {0};

View File

@ -46,7 +46,7 @@ void PerfMonitor::ReportJankFrameApp(double jank) {}
void PerfMonitor::RecordInputEvent(PerfActionType type, PerfSourceType sourceType, int64_t time) {}
int64_t PerfMonitor::GetInputTime(PerfActionType type, const std::string& note)
int64_t PerfMonitor::GetInputTime(const std::string& sceneId, PerfActionType type, const std::string& note)
{
return 0;
}