diff options
-rw-r--r-- | services/surfaceflinger/RegionSamplingThread.cpp | 3 | ||||
-rw-r--r-- | services/surfaceflinger/Scheduler/Scheduler.cpp | 7 | ||||
-rw-r--r-- | services/surfaceflinger/Scheduler/Scheduler.h | 2 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 14 |
4 files changed, 11 insertions, 15 deletions
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp index ad4877bdeb..2aea8b4c74 100644 --- a/services/surfaceflinger/RegionSamplingThread.cpp +++ b/services/surfaceflinger/RegionSamplingThread.cpp @@ -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++; diff --git a/services/surfaceflinger/Scheduler/Scheduler.cpp b/services/surfaceflinger/Scheduler/Scheduler.cpp index d032b6d409..18c899bc0f 100644 --- a/services/surfaceflinger/Scheduler/Scheduler.cpp +++ b/services/surfaceflinger/Scheduler/Scheduler.cpp @@ -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) { diff --git a/services/surfaceflinger/Scheduler/Scheduler.h b/services/surfaceflinger/Scheduler/Scheduler.h index c4e1edf574..403d9bc097 100644 --- a/services/surfaceflinger/Scheduler/Scheduler.h +++ b/services/surfaceflinger/Scheduler/Scheduler.h @@ -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); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 89442ac728..fd2e20ee92 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -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 |