From 97e7cc0ce23e417a2355a4559d43fd9c9ccb4efa Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Mon, 7 Jun 2021 10:45:40 -0700 Subject: SF: Pass transformHint with releaseBuffer We want the client to receive the tranformHint as early as possible, in particular prior to beginning rendering of a new frame. Since the releaseBuffer callback may cause the client to begin rendering we should include our most up to date transform hint here. Bug: 184842607 Test: Existing tests pass Change-Id: I61127d78f44b7332ad9ff3cade772fa6b475365f --- services/surfaceflinger/BufferStateLayer.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'services/surfaceflinger/BufferStateLayer.cpp') diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp index 54daa102ba..0f0f08afc7 100644 --- a/services/surfaceflinger/BufferStateLayer.cpp +++ b/services/surfaceflinger/BufferStateLayer.cpp @@ -43,11 +43,13 @@ namespace android { using PresentState = frametimeline::SurfaceFrame::PresentState; namespace { void callReleaseBufferCallback(const sp& listener, - const sp& buffer, const sp& releaseFence) { + const sp& buffer, const sp& releaseFence, + uint32_t transformHint) { if (!listener) { return; } - listener->onReleaseBuffer(buffer->getId(), releaseFence ? releaseFence : Fence::NO_FENCE); + listener->onReleaseBuffer(buffer->getId(), releaseFence ? releaseFence : Fence::NO_FENCE, + transformHint); } } // namespace @@ -72,7 +74,8 @@ BufferStateLayer::~BufferStateLayer() { // issue with the clone layer trying to use the texture. if (mBufferInfo.mBuffer != nullptr && !isClone()) { callReleaseBufferCallback(mDrawingState.releaseBufferListener, - mBufferInfo.mBuffer->getBuffer(), mBufferInfo.mFence); + mBufferInfo.mBuffer->getBuffer(), mBufferInfo.mFence, + mTransformHint); } } @@ -427,7 +430,8 @@ bool BufferStateLayer::setBuffer(const std::shared_ptrgetBuffer(), - mCurrentState.acquireFence); + mCurrentState.acquireFence, + mTransformHint); decrementPendingBufferCount(); if (mCurrentState.bufferSurfaceFrameTX != nullptr) { addSurfaceFrameDroppedForBuffer(mCurrentState.bufferSurfaceFrameTX); @@ -946,7 +950,8 @@ void BufferStateLayer::bufferMayChange(const sp& newBuffer) { // then we will drop a buffer and should decrement the pending buffer count and // call any release buffer callbacks if set. callReleaseBufferCallback(mDrawingState.releaseBufferListener, - mDrawingState.buffer->getBuffer(), mDrawingState.acquireFence); + mDrawingState.buffer->getBuffer(), mDrawingState.acquireFence, + mTransformHint); decrementPendingBufferCount(); } } -- cgit v1.2.3-59-g8ed1b