Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e90dd52d authored by Ady Abraham's avatar Ady Abraham
Browse files

SurfaceFlinger: return DisplayStatInfo from getDisplayStatInfo

Code cleanup - return the class instead of passing it as an
output parameter.

Test: SF unit tests
Change-Id: I7a995415a81f3944d93a1cb573c8e3108464bd07
parent 64c2fc0e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -250,8 +250,7 @@ void RegionSamplingThread::doSample() {
        // If there is relatively little time left for surfaceflinger
        // until the next vsync deadline, defer this sampling work
        // to a later frame, when hopefully there will be more time.
        DisplayStatInfo stats;
        mScheduler.getDisplayStatInfo(&stats, systemTime());
        const DisplayStatInfo stats = mScheduler.getDisplayStatInfo(systemTime());
        if (std::chrono::nanoseconds(stats.vsyncTime) - now < timeForRegionSampling) {
            ATRACE_INT(lumaSamplingStepTag, static_cast<int>(samplingStep::waitForQuietFrame));
            mDiscardedFrames++;
+4 −3
Original line number Diff line number Diff line
@@ -426,9 +426,10 @@ void Scheduler::setDuration(ConnectionHandle handle, std::chrono::nanoseconds wo
    thread->setDuration(workDuration, readyDuration);
}

void Scheduler::getDisplayStatInfo(DisplayStatInfo* stats, nsecs_t now) {
    stats->vsyncTime = mVsyncSchedule.tracker->nextAnticipatedVSyncTimeFrom(now);
    stats->vsyncPeriod = mVsyncSchedule.tracker->currentPeriod();
DisplayStatInfo Scheduler::getDisplayStatInfo(nsecs_t now) {
    const auto vsyncTime = mVsyncSchedule.tracker->nextAnticipatedVSyncTimeFrom(now);
    const auto vsyncPeriod = mVsyncSchedule.tracker->currentPeriod();
    return DisplayStatInfo{.vsyncTime = vsyncTime, .vsyncPeriod = vsyncPeriod};
}

Scheduler::ConnectionHandle Scheduler::enableVSyncInjection(bool enable) {
+1 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ public:
    void setDuration(ConnectionHandle, std::chrono::nanoseconds workDuration,
                     std::chrono::nanoseconds readyDuration);

    void getDisplayStatInfo(DisplayStatInfo* stats, nsecs_t now);
    DisplayStatInfo getDisplayStatInfo(nsecs_t now);

    // Returns injector handle if injection has toggled, or an invalid handle otherwise.
    ConnectionHandle enableVSyncInjection(bool enable);
+5 −9
Original line number Diff line number Diff line
@@ -963,7 +963,7 @@ status_t SurfaceFlinger::getDisplayStats(const sp<IBinder>&, DisplayStatInfo* st
        return BAD_VALUE;
    }

    mScheduler->getDisplayStatInfo(stats, systemTime());
    *stats = mScheduler->getDisplayStatInfo(systemTime());
    return NO_ERROR;
}

@@ -1440,8 +1440,7 @@ status_t SurfaceFlinger::enableVSyncInjections(bool enable) {

status_t SurfaceFlinger::injectVSync(nsecs_t when) {
    Mutex::Autolock lock(mStateLock);
    DisplayStatInfo stats;
    mScheduler->getDisplayStatInfo(&stats, when);
    const DisplayStatInfo stats = mScheduler->getDisplayStatInfo(when);
    const auto expectedPresent = calculateExpectedPresentTime(stats);
    return mScheduler->injectVSync(when, /*expectedVSyncTime=*/expectedPresent,
                                   /*deadlineTimestamp=*/expectedPresent)
@@ -1769,8 +1768,7 @@ void SurfaceFlinger::onMessageInvalidate(int64_t vsyncId, nsecs_t expectedVSyncT
    // Add some slop to correct for drift. This should generally be
    // smaller than a typical frame duration, but should not be so small
    // that it reports reasonable drift as a missed frame.
    DisplayStatInfo stats;
    mScheduler->getDisplayStatInfo(&stats, systemTime());
    const DisplayStatInfo stats = mScheduler->getDisplayStatInfo(systemTime());
    const nsecs_t frameMissedSlop = stats.vsyncPeriod / 2;
    const nsecs_t previousPresentTime = previousFramePresentTime();
    const TracedOrdinal<bool> frameMissed = {"PrevFrameMissed",
@@ -2147,8 +2145,7 @@ void SurfaceFlinger::postComposition() {
    auto presentFenceTime = std::make_shared<FenceTime>(mPreviousPresentFences[0]);
    getBE().mDisplayTimeline.push(presentFenceTime);

    DisplayStatInfo stats;
    mScheduler->getDisplayStatInfo(&stats, systemTime());
    const DisplayStatInfo stats = mScheduler->getDisplayStatInfo(systemTime());

    // We use the CompositionEngine::getLastFrameRefreshTimestamp() which might
    // be sampled a little later than when we started doing work for this frame,
@@ -3364,8 +3361,7 @@ status_t SurfaceFlinger::setTransactionState(
    if (!pendingTransactions) {
        const auto now = systemTime();
        const bool nextVsyncPending = now < mExpectedPresentTime.load();
        DisplayStatInfo stats;
        mScheduler->getDisplayStatInfo(&stats, now);
        const DisplayStatInfo stats = mScheduler->getDisplayStatInfo(now);
        mExpectedPresentTime = calculateExpectedPresentTime(stats);
        // The transaction might arrive just before the next vsync but after
        // invalidate was called. In that case we need to get the next vsync