Skip to content

Commit 11c4285

Browse files
Ram IndaniAndroid (Google) Code Review
authored andcommitted
Merge "SF: add trace points to debug 4ms jank" into main
2 parents 34165d8 + 7abbc35 commit 11c4285

2 files changed

Lines changed: 25 additions & 12 deletions

File tree

services/surfaceflinger/Scheduler/VSyncPredictor.cpp

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,8 @@ void VSyncPredictor::setDisplayModePtr(ftl::NonNull<DisplayModePtr> modePtr) {
458458

459459
Duration VSyncPredictor::ensureMinFrameDurationIsKept(TimePoint expectedPresentTime,
460460
TimePoint lastConfirmedPresentTime) {
461-
SFTRACE_CALL();
461+
SFTRACE_FORMAT("%s mNumVsyncsForFrame=%d mPastExpectedPresentTimes.size()=%zu", __func__,
462+
mNumVsyncsForFrame, mPastExpectedPresentTimes.size());
462463

463464
if (mNumVsyncsForFrame <= 1) {
464465
return 0ns;
@@ -470,12 +471,8 @@ Duration VSyncPredictor::ensureMinFrameDurationIsKept(TimePoint expectedPresentT
470471

471472
auto prev = lastConfirmedPresentTime.ns();
472473
for (auto& current : mPastExpectedPresentTimes) {
473-
if (CC_UNLIKELY(mTraceOn)) {
474-
SFTRACE_FORMAT_INSTANT("current %.2f past last signaled fence",
475-
static_cast<float>(current.ns() -
476-
lastConfirmedPresentTime.ns()) /
477-
1e6f);
478-
}
474+
SFTRACE_FORMAT_INSTANT("current %.2f past last signaled fence",
475+
static_cast<float>(current.ns() - prev) / 1e6f);
479476

480477
const auto minPeriodViolation = current.ns() - prev + threshold < minFramePeriod.ns();
481478
if (minPeriodViolation) {
@@ -522,11 +519,9 @@ void VSyncPredictor::onFrameBegin(TimePoint expectedPresentTime, FrameTime lastS
522519
const auto front = mPastExpectedPresentTimes.front().ns();
523520
const bool frontIsBeforeConfirmed = front < lastConfirmedPresentTime.ns() + threshold;
524521
if (frontIsBeforeConfirmed) {
525-
if (CC_UNLIKELY(mTraceOn)) {
526-
SFTRACE_FORMAT_INSTANT("Discarding old vsync - %.2f before last signaled fence",
527-
static_cast<float>(lastConfirmedPresentTime.ns() - front) /
528-
1e6f);
529-
}
522+
SFTRACE_FORMAT_INSTANT("Discarding old vsync - %.2f before last signaled fence",
523+
static_cast<float>(lastConfirmedPresentTime.ns() - front) /
524+
1e6f);
530525
mPastExpectedPresentTimes.pop_front();
531526
} else {
532527
break;

services/surfaceflinger/Scheduler/src/FrameTargeter.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ FrameTarget::FrameTarget(const std::string& displayLabel)
3131

3232
std::pair<bool /* wouldBackpressure */, FrameTarget::PresentFence>
3333
FrameTarget::expectedSignaledPresentFence(Period vsyncPeriod, Period minFramePeriod) const {
34+
SFTRACE_CALL();
3435
if (!FlagManager::getInstance().allow_n_vsyncs_in_targeter()) {
3536
const size_t i = static_cast<size_t>(targetsVsyncsAhead<2>(minFramePeriod));
3637
return {true, mPresentFencesLegacy[i]};
@@ -40,17 +41,28 @@ FrameTarget::expectedSignaledPresentFence(Period vsyncPeriod, Period minFramePer
4041
auto expectedPresentTime = mExpectedPresentTime;
4142
for (size_t i = mPresentFences.size(); i != 0; --i) {
4243
const auto& fence = mPresentFences[i - 1];
44+
SFTRACE_FORMAT_INSTANT("fence at idx: %zu expectedPresentTime in %.2f", i - 1,
45+
ticks<std::milli, float>(fence.expectedPresentTime -
46+
TimePoint::now()));
4347

4448
if (fence.expectedPresentTime + minFramePeriod < expectedPresentTime - vsyncPeriod / 2) {
49+
SFTRACE_FORMAT_INSTANT("would not backpressure");
4550
wouldBackpressure = false;
4651
}
4752

4853
if (fence.expectedPresentTime <= mFrameBeginTime) {
54+
SFTRACE_FORMAT_INSTANT("fence at idx: %zu is %.2f before frame begin "
55+
"(wouldBackpressure=%s)",
56+
i - 1,
57+
ticks<std::milli, float>(mFrameBeginTime -
58+
fence.expectedPresentTime),
59+
wouldBackpressure ? "true" : "false");
4960
return {wouldBackpressure, fence};
5061
}
5162

5263
expectedPresentTime = fence.expectedPresentTime;
5364
}
65+
SFTRACE_FORMAT_INSTANT("No fence found");
5466
return {wouldBackpressure, PresentFence{}};
5567
}
5668

@@ -154,6 +166,12 @@ void FrameTargeter::beginFrame(const BeginFrameArgs& args, const IVsyncSource& v
154166
if (pastPresentTime < 0) return false;
155167
mLastSignaledFrameTime = {.signalTime = TimePoint::fromNs(pastPresentTime),
156168
.expectedPresentTime = fence.expectedPresentTime};
169+
SFTRACE_FORMAT_INSTANT("LastSignaledFrameTime expectedPresentTime %.2f ago, signalTime "
170+
"%.2f ago",
171+
ticks<std::milli, float>(mLastSignaledFrameTime.expectedPresentTime -
172+
TimePoint::now()),
173+
ticks<std::milli, float>(mLastSignaledFrameTime.signalTime -
174+
TimePoint::now()));
157175
const nsecs_t frameMissedSlop = vsyncPeriod.ns() / 2;
158176
return lastScheduledPresentTime.ns() < pastPresentTime - frameMissedSlop;
159177
}();

0 commit comments

Comments
 (0)