mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2024-10-07 08:24:11 +00:00
ability_or_page_switch response optimization
Signed-off-by: x00503640 <xufang21@huawei.com>
This commit is contained in:
parent
c5d4235f8a
commit
7caae9295e
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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};
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user