Loading services/surfaceflinger/BufferStateLayer.cpp +34 −4 Original line number Diff line number Diff line Loading @@ -98,6 +98,8 @@ void BufferStateLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { } } mPreviousReleaseFence = releaseFence; // Prevent tracing the same release multiple times. if (mPreviousFrameNumber != mPreviousReleasedFrameNumber) { mFlinger->mFrameTracer->traceFence(getSequence(), mPreviousBufferId, mPreviousFrameNumber, Loading @@ -111,7 +113,7 @@ void BufferStateLayer::setTransformHint(uint32_t orientation) const { mTransformHint = orientation; } void BufferStateLayer::releasePendingBuffer(nsecs_t /*dequeueReadyTime*/) { void BufferStateLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { for (const auto& handle : mDrawingState.callbackHandles) { handle->transformHint = mTransformHint; } Loading @@ -120,6 +122,16 @@ void BufferStateLayer::releasePendingBuffer(nsecs_t /*dequeueReadyTime*/) { mDrawingState.callbackHandles); mDrawingState.callbackHandles = {}; const sp<Fence>& releaseFence(mPreviousReleaseFence); std::shared_ptr<FenceTime> releaseFenceTime = std::make_shared<FenceTime>(releaseFence); { Mutex::Autolock lock(mFrameEventHistoryMutex); if (mPreviousFrameNumber != 0) { mFrameEventHistory.addRelease(mPreviousFrameNumber, dequeueReadyTime, std::move(releaseFenceTime)); } } } bool BufferStateLayer::shouldPresentNow(nsecs_t /*expectedPresentTime*/) const { Loading Loading @@ -233,8 +245,21 @@ bool BufferStateLayer::setFrame(const Rect& frame) { return true; } bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) { bool BufferStateLayer::updateFrameEventHistory(const sp<Fence>& acquireFence, nsecs_t postedTime, nsecs_t desiredPresentTime) { Mutex::Autolock lock(mFrameEventHistoryMutex); mAcquireTimeline.updateSignalTimes(); std::shared_ptr<FenceTime> acquireFenceTime = std::make_shared<FenceTime>((acquireFence ? acquireFence : Fence::NO_FENCE)); NewFrameEventsEntry newTimestamps = {mCurrentState.frameNumber, postedTime, desiredPresentTime, acquireFenceTime}; mFrameEventHistory.addQueue(newTimestamps); return true; } bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, const sp<Fence>& acquireFence, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) { if (mCurrentState.buffer) { mReleasePreviousBuffer = true; } Loading @@ -257,6 +282,7 @@ bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTi mFlinger->mScheduler->recordLayerHistory(this, desiredPresentTime <= 0 ? 0 : desiredPresentTime); updateFrameEventHistory(acquireFence, postTime, desiredPresentTime); return true; } Loading Loading @@ -553,10 +579,14 @@ status_t BufferStateLayer::updateActiveBuffer() { return NO_ERROR; } status_t BufferStateLayer::updateFrameNumber(nsecs_t /*latchTime*/) { status_t BufferStateLayer::updateFrameNumber(nsecs_t latchTime) { // TODO(marissaw): support frame history events mPreviousFrameNumber = mCurrentFrameNumber; mCurrentFrameNumber = mDrawingState.frameNumber; { Mutex::Autolock lock(mFrameEventHistoryMutex); mFrameEventHistory.addLatch(mCurrentFrameNumber, latchTime); } return NO_ERROR; } Loading services/surfaceflinger/BufferStateLayer.h +5 −2 Original line number Diff line number Diff line Loading @@ -68,8 +68,8 @@ public: bool setTransformToDisplayInverse(bool transformToDisplayInverse) override; bool setCrop(const Rect& crop) override; bool setFrame(const Rect& frame) override; bool setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) override; bool setBuffer(const sp<GraphicBuffer>& buffer, const sp<Fence>& acquireFence, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) override; bool setAcquireFence(const sp<Fence>& fence) override; bool setDataspace(ui::Dataspace dataspace) override; bool setHdrMetadata(const HdrMetadata& hdrMetadata) override; Loading Loading @@ -109,6 +109,9 @@ protected: void gatherBufferInfo() override; private: bool updateFrameEventHistory(const sp<Fence>& acquireFence, nsecs_t postedTime, nsecs_t requestedPresentTime); uint64_t getFrameNumber(nsecs_t expectedPresentTime) const override; bool getAutoRefresh() const override; Loading services/surfaceflinger/Layer.h +2 −2 Original line number Diff line number Diff line Loading @@ -329,8 +329,8 @@ public: virtual bool setTransformToDisplayInverse(bool /*transformToDisplayInverse*/) { return false; }; virtual bool setCrop(const Rect& /*crop*/) { return false; }; virtual bool setFrame(const Rect& /*frame*/) { return false; }; virtual bool setBuffer(const sp<GraphicBuffer>& /*buffer*/, nsecs_t /*postTime*/, nsecs_t /*desiredPresentTime*/, virtual bool setBuffer(const sp<GraphicBuffer>& /*buffer*/, const sp<Fence>& /*acquireFence*/, nsecs_t /*postTime*/, nsecs_t /*desiredPresentTime*/, const client_cache_t& /*clientCacheId*/) { return false; }; Loading services/surfaceflinger/RefreshRateOverlay.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -208,7 +208,7 @@ void RefreshRateOverlay::changeRefreshRate(const RefreshRate& refreshRate) { const int32_t buttom = top + display->getHeight() / 32; auto buffer = mBufferCache[refreshRate.fps]; mLayer->setBuffer(buffer, 0, 0, {}); mLayer->setBuffer(buffer, Fence::NO_FENCE, 0, 0, {}); mLayer->setFrame(Rect(left, top, right, buttom)); Loading services/surfaceflinger/SurfaceFlinger.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -3590,7 +3590,8 @@ uint32_t SurfaceFlinger::setClientStateLocked( buffer = s.buffer; } if (buffer) { if (layer->setBuffer(buffer, postTime, desiredPresentTime, s.cachedBuffer)) { if (layer->setBuffer(buffer, s.acquireFence, postTime, desiredPresentTime, s.cachedBuffer)) { flags |= eTraversalNeeded; } } Loading Loading
services/surfaceflinger/BufferStateLayer.cpp +34 −4 Original line number Diff line number Diff line Loading @@ -98,6 +98,8 @@ void BufferStateLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { } } mPreviousReleaseFence = releaseFence; // Prevent tracing the same release multiple times. if (mPreviousFrameNumber != mPreviousReleasedFrameNumber) { mFlinger->mFrameTracer->traceFence(getSequence(), mPreviousBufferId, mPreviousFrameNumber, Loading @@ -111,7 +113,7 @@ void BufferStateLayer::setTransformHint(uint32_t orientation) const { mTransformHint = orientation; } void BufferStateLayer::releasePendingBuffer(nsecs_t /*dequeueReadyTime*/) { void BufferStateLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { for (const auto& handle : mDrawingState.callbackHandles) { handle->transformHint = mTransformHint; } Loading @@ -120,6 +122,16 @@ void BufferStateLayer::releasePendingBuffer(nsecs_t /*dequeueReadyTime*/) { mDrawingState.callbackHandles); mDrawingState.callbackHandles = {}; const sp<Fence>& releaseFence(mPreviousReleaseFence); std::shared_ptr<FenceTime> releaseFenceTime = std::make_shared<FenceTime>(releaseFence); { Mutex::Autolock lock(mFrameEventHistoryMutex); if (mPreviousFrameNumber != 0) { mFrameEventHistory.addRelease(mPreviousFrameNumber, dequeueReadyTime, std::move(releaseFenceTime)); } } } bool BufferStateLayer::shouldPresentNow(nsecs_t /*expectedPresentTime*/) const { Loading Loading @@ -233,8 +245,21 @@ bool BufferStateLayer::setFrame(const Rect& frame) { return true; } bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) { bool BufferStateLayer::updateFrameEventHistory(const sp<Fence>& acquireFence, nsecs_t postedTime, nsecs_t desiredPresentTime) { Mutex::Autolock lock(mFrameEventHistoryMutex); mAcquireTimeline.updateSignalTimes(); std::shared_ptr<FenceTime> acquireFenceTime = std::make_shared<FenceTime>((acquireFence ? acquireFence : Fence::NO_FENCE)); NewFrameEventsEntry newTimestamps = {mCurrentState.frameNumber, postedTime, desiredPresentTime, acquireFenceTime}; mFrameEventHistory.addQueue(newTimestamps); return true; } bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, const sp<Fence>& acquireFence, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) { if (mCurrentState.buffer) { mReleasePreviousBuffer = true; } Loading @@ -257,6 +282,7 @@ bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTi mFlinger->mScheduler->recordLayerHistory(this, desiredPresentTime <= 0 ? 0 : desiredPresentTime); updateFrameEventHistory(acquireFence, postTime, desiredPresentTime); return true; } Loading Loading @@ -553,10 +579,14 @@ status_t BufferStateLayer::updateActiveBuffer() { return NO_ERROR; } status_t BufferStateLayer::updateFrameNumber(nsecs_t /*latchTime*/) { status_t BufferStateLayer::updateFrameNumber(nsecs_t latchTime) { // TODO(marissaw): support frame history events mPreviousFrameNumber = mCurrentFrameNumber; mCurrentFrameNumber = mDrawingState.frameNumber; { Mutex::Autolock lock(mFrameEventHistoryMutex); mFrameEventHistory.addLatch(mCurrentFrameNumber, latchTime); } return NO_ERROR; } Loading
services/surfaceflinger/BufferStateLayer.h +5 −2 Original line number Diff line number Diff line Loading @@ -68,8 +68,8 @@ public: bool setTransformToDisplayInverse(bool transformToDisplayInverse) override; bool setCrop(const Rect& crop) override; bool setFrame(const Rect& frame) override; bool setBuffer(const sp<GraphicBuffer>& buffer, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) override; bool setBuffer(const sp<GraphicBuffer>& buffer, const sp<Fence>& acquireFence, nsecs_t postTime, nsecs_t desiredPresentTime, const client_cache_t& clientCacheId) override; bool setAcquireFence(const sp<Fence>& fence) override; bool setDataspace(ui::Dataspace dataspace) override; bool setHdrMetadata(const HdrMetadata& hdrMetadata) override; Loading Loading @@ -109,6 +109,9 @@ protected: void gatherBufferInfo() override; private: bool updateFrameEventHistory(const sp<Fence>& acquireFence, nsecs_t postedTime, nsecs_t requestedPresentTime); uint64_t getFrameNumber(nsecs_t expectedPresentTime) const override; bool getAutoRefresh() const override; Loading
services/surfaceflinger/Layer.h +2 −2 Original line number Diff line number Diff line Loading @@ -329,8 +329,8 @@ public: virtual bool setTransformToDisplayInverse(bool /*transformToDisplayInverse*/) { return false; }; virtual bool setCrop(const Rect& /*crop*/) { return false; }; virtual bool setFrame(const Rect& /*frame*/) { return false; }; virtual bool setBuffer(const sp<GraphicBuffer>& /*buffer*/, nsecs_t /*postTime*/, nsecs_t /*desiredPresentTime*/, virtual bool setBuffer(const sp<GraphicBuffer>& /*buffer*/, const sp<Fence>& /*acquireFence*/, nsecs_t /*postTime*/, nsecs_t /*desiredPresentTime*/, const client_cache_t& /*clientCacheId*/) { return false; }; Loading
services/surfaceflinger/RefreshRateOverlay.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -208,7 +208,7 @@ void RefreshRateOverlay::changeRefreshRate(const RefreshRate& refreshRate) { const int32_t buttom = top + display->getHeight() / 32; auto buffer = mBufferCache[refreshRate.fps]; mLayer->setBuffer(buffer, 0, 0, {}); mLayer->setBuffer(buffer, Fence::NO_FENCE, 0, 0, {}); mLayer->setFrame(Rect(left, top, right, buttom)); Loading
services/surfaceflinger/SurfaceFlinger.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -3590,7 +3590,8 @@ uint32_t SurfaceFlinger::setClientStateLocked( buffer = s.buffer; } if (buffer) { if (layer->setBuffer(buffer, postTime, desiredPresentTime, s.cachedBuffer)) { if (layer->setBuffer(buffer, s.acquireFence, postTime, desiredPresentTime, s.cachedBuffer)) { flags |= eTraversalNeeded; } } Loading