Merge "hwui: improve RenderThread jank classificaion" into udc-qpr-dev

This commit is contained in:
Ady Abraham
2023-06-13 18:00:15 +00:00
committed by Android (Google) Code Review
2 changed files with 28 additions and 5 deletions

View File

@@ -405,8 +405,17 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo, int64_t sy
// If the previous frame was dropped we don't need to hold onto it, so
// just keep using the previous frame's structure instead
if (!wasSkipped(mCurrentFrameInfo)) {
if (wasSkipped(mCurrentFrameInfo)) {
// Use the oldest skipped frame in case we skip more than a single frame
if (!mSkippedFrameInfo) {
mSkippedFrameInfo.emplace();
mSkippedFrameInfo->vsyncId =
mCurrentFrameInfo->get(FrameInfoIndex::FrameTimelineVsyncId);
mSkippedFrameInfo->startTime = mCurrentFrameInfo->get(FrameInfoIndex::FrameStartTime);
}
} else {
mCurrentFrameInfo = mJankTracker.startFrame();
mSkippedFrameInfo.reset();
}
mCurrentFrameInfo->importUiThreadInfo(uiFrameInfo);
@@ -602,10 +611,18 @@ void CanvasContext::draw(bool solelyTextureViewUpdates) {
if (vsyncId != UiFrameInfoBuilder::INVALID_VSYNC_ID) {
const auto inputEventId =
static_cast<int32_t>(mCurrentFrameInfo->get(FrameInfoIndex::InputEventId));
native_window_set_frame_timeline_info(
mNativeSurface->getNativeWindow(), frameCompleteNr, vsyncId, inputEventId,
mCurrentFrameInfo->get(FrameInfoIndex::FrameStartTime),
solelyTextureViewUpdates);
const ANativeWindowFrameTimelineInfo ftl = {
.frameNumber = frameCompleteNr,
.frameTimelineVsyncId = vsyncId,
.inputEventId = inputEventId,
.startTimeNanos = mCurrentFrameInfo->get(FrameInfoIndex::FrameStartTime),
.useForRefreshRateSelection = solelyTextureViewUpdates,
.skippedFrameVsyncId = mSkippedFrameInfo ? mSkippedFrameInfo->vsyncId
: UiFrameInfoBuilder::INVALID_VSYNC_ID,
.skippedFrameStartTimeNanos =
mSkippedFrameInfo ? mSkippedFrameInfo->startTime : 0,
};
native_window_set_frame_timeline_info(mNativeSurface->getNativeWindow(), ftl);
}
}

View File

@@ -366,6 +366,12 @@ private:
ColorMode mColorMode = ColorMode::Default;
float mTargetSdrHdrRatio = 1.f;
struct SkippedFrameInfo {
int64_t vsyncId;
int64_t startTime;
};
std::optional<SkippedFrameInfo> mSkippedFrameInfo;
};
} /* namespace renderthread */