diff options
author | 2022-07-07 11:50:20 -0700 | |
---|---|---|
committer | 2022-07-12 12:18:18 -0700 | |
commit | 4376bd84b4ee9d038daeba17dfae3e7174bbf5bd (patch) | |
tree | e06cfab12535d17a88acf98ee9dfcc5bff308823 | |
parent | 5d164f2b95e5f867307b7105bbaaadd6a7fcc422 (diff) |
SF: Remove CompositorTiming state and lock
Replace the CompositorTiming::interval access on layer creation with a
RefreshRateConfigs lookup.
Bug: 185535769
Test: Perfetto timeline is green.
Change-Id: I0d2240f879b60c1d0ffe68be35c96a227e495ce3
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 6 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 26 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 9 | ||||
-rw-r--r-- | services/surfaceflinger/fuzzer/surfaceflinger_fuzzers_utils.h | 13 | ||||
-rw-r--r-- | services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h | 2 |
5 files changed, 16 insertions, 40 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 80df3996ce..fa71e72809 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -155,9 +155,9 @@ Layer::Layer(const LayerCreationArgs& args) mDrawingState.color.g = -1.0_hf; mDrawingState.color.b = -1.0_hf; } - CompositorTiming compositorTiming; - args.flinger->getCompositorTiming(&compositorTiming); - mFrameTracker.setDisplayRefreshPeriod(compositorTiming.interval); + + mFrameTracker.setDisplayRefreshPeriod( + args.flinger->mScheduler->getVsyncPeriodFromRefreshRateConfigs()); mCallingPid = args.callingPid; mCallingUid = args.callingUid; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 65e4b4e2c7..9f1cf9c362 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1886,11 +1886,6 @@ void SurfaceFlinger::onComposerHalVsync(hal::HWDisplayId hwcDisplayId, int64_t t } } -void SurfaceFlinger::getCompositorTiming(CompositorTiming* compositorTiming) { - std::lock_guard<std::mutex> lock(getBE().mCompositorTimingLock); - *compositorTiming = getBE().mCompositorTiming; -} - void SurfaceFlinger::onComposerHalHotplug(hal::HWDisplayId hwcDisplayId, hal::Connection connection) { const bool connected = connection == hal::Connection::CONNECTED; @@ -2349,8 +2344,8 @@ nsecs_t SurfaceFlinger::trackPresentLatency(nsecs_t compositeTime, return compositeToPresentLatency; } -void SurfaceFlinger::setCompositorTimingSnapped(nsecs_t vsyncDeadline, nsecs_t vsyncPeriod, - nsecs_t compositeToPresentLatency) { +CompositorTiming SurfaceFlinger::makeCompositorTiming(nsecs_t vsyncDeadline, nsecs_t vsyncPeriod, + nsecs_t compositeToPresentLatency) { // Avoid division by 0 by defaulting to 60Hz vsyncPeriod = vsyncPeriod ?: (60_Hz).getPeriodNsecs(); @@ -2377,10 +2372,9 @@ void SurfaceFlinger::setCompositorTimingSnapped(nsecs_t vsyncDeadline, nsecs_t v const nsecs_t snappedCompositeToPresentLatency = (extraVsyncs > 0) ? idealLatency + (extraVsyncs * vsyncPeriod) : idealLatency; - std::lock_guard<std::mutex> lock(getBE().mCompositorTimingLock); - getBE().mCompositorTiming.deadline = vsyncDeadline - idealLatency; - getBE().mCompositorTiming.interval = vsyncPeriod; - getBE().mCompositorTiming.presentLatency = snappedCompositeToPresentLatency; + return {.deadline = vsyncDeadline - idealLatency, + .interval = vsyncPeriod, + .presentLatency = snappedCompositeToPresentLatency}; } bool SurfaceFlinger::isHdrLayer(Layer* layer) const { @@ -2469,7 +2463,7 @@ void SurfaceFlinger::postComposition() { // We use the CompositionEngine::getLastFrameRefreshTimestamp() which might // be sampled a little later than when we started doing work for this frame, - // but that should be okay since setCompositorTimingSnapped has snapping logic. + // but that should be okay since makeCompositorTiming has snapping logic. const nsecs_t compositeTime = mCompositionEngine->getLastFrameRefreshTimestamp(); const nsecs_t presentLatency = trackPresentLatency(compositeTime, mPreviousPresentFences[0].fenceTime); @@ -2477,13 +2471,9 @@ void SurfaceFlinger::postComposition() { const auto& schedule = mScheduler->getVsyncSchedule(); const TimePoint vsyncDeadline = schedule.vsyncDeadlineAfter(TimePoint::fromNs(now)); const Period vsyncPeriod = schedule.period(); - setCompositorTimingSnapped(vsyncDeadline.ns(), vsyncPeriod.ns(), presentLatency); - CompositorTiming compositorTiming; - { - std::lock_guard<std::mutex> lock(getBE().mCompositorTimingLock); - compositorTiming = getBE().mCompositorTiming; - } + const CompositorTiming compositorTiming = + makeCompositorTiming(vsyncDeadline.ns(), vsyncPeriod.ns(), presentLatency); for (const auto& layer: mLayersWithQueuedFrames) { layer->onPostComposition(display, glCompositionDoneFenceTime, diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index f6dbfbfd3d..0e5386fa81 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -168,10 +168,6 @@ enum class LatchUnsignaledConfig { using DisplayColorSetting = compositionengine::OutputColorSetting; struct SurfaceFlingerBE { - // protected by mCompositorTimingLock; - mutable std::mutex mCompositorTimingLock; - CompositorTiming mCompositorTiming; - // Only accessed from the main thread. struct CompositePresentTime { nsecs_t composite = -1; @@ -962,9 +958,8 @@ private: // Returns the composite-to-present latency of the latest presented frame. nsecs_t trackPresentLatency(nsecs_t compositeTime, std::shared_ptr<FenceTime> presentFenceTime); - void getCompositorTiming(CompositorTiming* compositorTiming); - void setCompositorTimingSnapped(nsecs_t vsyncDeadline, nsecs_t vsyncPeriod, - nsecs_t compositeToPresentLatency); + CompositorTiming makeCompositorTiming(nsecs_t vsyncDeadline, nsecs_t vsyncPeriod, + nsecs_t compositeToPresentLatency); void postFrame() REQUIRES(kMainThreadContext); diff --git a/services/surfaceflinger/fuzzer/surfaceflinger_fuzzers_utils.h b/services/surfaceflinger/fuzzer/surfaceflinger_fuzzers_utils.h index b811ea3124..69ef2bf18b 100644 --- a/services/surfaceflinger/fuzzer/surfaceflinger_fuzzers_utils.h +++ b/services/surfaceflinger/fuzzer/surfaceflinger_fuzzers_utils.h @@ -535,11 +535,6 @@ public: mFlinger->setVsyncConfig(vsyncConfig, fdp->ConsumeIntegral<nsecs_t>()); } - void getCompositorTiming() { - CompositorTiming compositorTiming; - mFlinger->getCompositorTiming(&compositorTiming); - } - sp<IBinder> fuzzBoot(FuzzedDataProvider *fdp) { mFlinger->callingThreadHasUnscopedSurfaceFlingerAccess(fdp->ConsumeBool()); const sp<Client> client = new Client(mFlinger); @@ -634,12 +629,10 @@ public: mFlinger->postComposition(); - getCompositorTiming(); - mFlinger->trackPresentLatency(mFdp.ConsumeIntegral<nsecs_t>(), FenceTime::NO_FENCE); - mFlinger->setCompositorTimingSnapped(mFdp.ConsumeIntegral<nsecs_t>(), - mFdp.ConsumeIntegral<nsecs_t>(), - mFdp.ConsumeIntegral<nsecs_t>()); + mFlinger->makeCompositorTiming(mFdp.ConsumeIntegral<nsecs_t>(), + mFdp.ConsumeIntegral<nsecs_t>(), + mFdp.ConsumeIntegral<nsecs_t>()); FTL_FAKE_GUARD(kMainThreadContext, mFlinger->postFrame()); mFlinger->calculateExpectedPresentTime({}); diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h index 3a05e2fb34..e0d4f28ffe 100644 --- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h @@ -501,8 +501,6 @@ public: } auto& getCompositionEngine() const { return mFlinger->getCompositionEngine(); } - const auto& getCompositorTiming() const { return mFlinger->getBE().mCompositorTiming; } - mock::FrameTracer* getFrameTracer() const { return static_cast<mock::FrameTracer*>(mFlinger->mFrameTracer.get()); } |