diff options
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 13 | ||||
| -rw-r--r-- | services/surfaceflinger/Layer.h | 5 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 6 |
3 files changed, 15 insertions, 9 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index dac09169c8..a29be22aa8 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -790,7 +790,7 @@ void Layer::transferAvailableJankData(const std::deque<sp<CallbackHandle>>& hand // transaction // ---------------------------------------------------------------------------- -uint32_t Layer::doTransaction(uint32_t flags, nsecs_t latchTime) { +uint32_t Layer::doTransaction(uint32_t flags) { ATRACE_CALL(); // TODO: This is unfortunate. @@ -818,12 +818,12 @@ uint32_t Layer::doTransaction(uint32_t flags, nsecs_t latchTime) { mFlinger->mUpdateInputInfo = true; } - commitTransaction(mDrawingState, latchTime); + commitTransaction(mDrawingState); return flags; } -void Layer::commitTransaction(State&, nsecs_t currentLatchTime) { +void Layer::commitTransaction(State&) { // Set the present state for all bufferlessSurfaceFramesTX to Presented. The // bufferSurfaceFrameTX will be presented in latchBuffer. for (auto& [token, surfaceFrame] : mDrawingState.bufferlessSurfaceFramesTX) { @@ -835,7 +835,6 @@ void Layer::commitTransaction(State&, nsecs_t currentLatchTime) { } } mDrawingState.bufferlessSurfaceFramesTX.clear(); - mLastLatchTime = currentLatchTime; } uint32_t Layer::clearTransactionFlags(uint32_t mask) { @@ -1381,7 +1380,7 @@ void Layer::addSurfaceFramePresentedForBuffer( surfaceFrame->setAcquireFenceTime(acquireFenceTime); surfaceFrame->setPresentState(PresentState::Presented, mLastLatchTime); mFlinger->mFrameTimeline->addSurfaceFrame(surfaceFrame); - mLastLatchTime = currentLatchTime; + updateLastLatchTime(currentLatchTime); } std::shared_ptr<frametimeline::SurfaceFrame> Layer::createSurfaceFrameForTransaction( @@ -4077,6 +4076,10 @@ void Layer::setTrustedPresentationInfo(TrustedPresentationThresholds const& thre } } +void Layer::updateLastLatchTime(nsecs_t latchTime) { + mLastLatchTime = latchTime; +} + // --------------------------------------------------------------------------- std::ostream& operator<<(std::ostream& stream, const Layer::FrameRate& rate) { diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 7d40774f83..326e1f675d 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -347,6 +347,7 @@ public: void useSurfaceDamage(); void useEmptyDamage(); Region getVisibleRegion(const DisplayDevice*) const; + void updateLastLatchTime(nsecs_t latchtime); /* * isOpaque - true if this surface is opaque @@ -623,7 +624,7 @@ public: * doTransaction - process the transaction. This is a good place to figure * out which attributes of the surface have changed. */ - virtual uint32_t doTransaction(uint32_t transactionFlags, nsecs_t currentLatchTime); + virtual uint32_t doTransaction(uint32_t transactionFlags); /* * Remove relative z for the layer if its relative parent is not part of the @@ -860,7 +861,7 @@ protected: void preparePerFrameCompositionState(); void preparePerFrameBufferCompositionState(); void preparePerFrameEffectsCompositionState(); - virtual void commitTransaction(State& stateToCommit, nsecs_t currentLatchTime = 0); + virtual void commitTransaction(State& stateToCommit); void gatherBufferInfo(); void onSurfaceFrameCreated(const std::shared_ptr<frametimeline::SurfaceFrame>&); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 51dc02c9c4..c91ad49c9a 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3863,7 +3863,7 @@ void SurfaceFlinger::commitOffscreenLayers() { for (Layer* offscreenLayer : mOffscreenLayers) { offscreenLayer->traverse(LayerVector::StateSet::Drawing, [](Layer* layer) { if (layer->clearTransactionFlags(eTransactionNeeded)) { - layer->doTransaction(0, 0); + layer->doTransaction(0); layer->commitChildList(); } }); @@ -3899,7 +3899,7 @@ bool SurfaceFlinger::latchBuffers() { // second frame. But layer 0's second frame could be waiting on display. mDrawingState.traverse([&](Layer* layer) { if (layer->clearTransactionFlags(eTransactionNeeded) || mForceTransactionDisplayChange) { - const uint32_t flags = layer->doTransaction(0, latchTime); + const uint32_t flags = layer->doTransaction(0); if (flags & Layer::eVisibleRegion) { mVisibleRegionsDirty = true; } @@ -3910,6 +3910,8 @@ bool SurfaceFlinger::latchBuffers() { mLayersWithQueuedFrames.emplace(sp<Layer>::fromExisting(layer)); } else { layer->useEmptyDamage(); + // If the layer has frames we will update the latch time when latching the buffer. + layer->updateLastLatchTime(latchTime); } }); mForceTransactionDisplayChange = false; |