diff options
author | 2018-12-20 16:23:45 -0800 | |
---|---|---|
committer | 2019-01-07 13:39:45 -0800 | |
commit | 0449b0fa3e3e88da8622da6e95a7eefea8c46a70 (patch) | |
tree | 57eac962d959508de399454604076cd343d36f66 /services/surfaceflinger/BufferQueueLayer.cpp | |
parent | f2c793939c42ff233ced4095cf85bb93ec74523f (diff) |
Revert "SurfaceFlinger: protect state members in Layer"
State update transactions must be atomic. The fine-grained lock on each
Layer implied otherwise. Revert the fine grained lock as being
unhelpful.
Unfortunately there does not seem to be a way to use Clang thread
annotations to specify the desired locking behavior.
Note that the parent CL addresses the locking problem that led to the
bug.
This reverts commit 83729883eecd31a9907bc79bc21998a90f17105c.
Bug: 119481871
Test: SurfaceFlinger unit tests
Test: go/wm-smoke
Change-Id: I361741f8d10102aeb57f164c847c6063ff93dd14
Diffstat (limited to 'services/surfaceflinger/BufferQueueLayer.cpp')
-rw-r--r-- | services/surfaceflinger/BufferQueueLayer.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp index 3341b98b67..5a6112258e 100644 --- a/services/surfaceflinger/BufferQueueLayer.cpp +++ b/services/surfaceflinger/BufferQueueLayer.cpp @@ -51,7 +51,7 @@ std::vector<OccupancyTracker::Segment> BufferQueueLayer::getOccupancyHistory(boo return history; } -bool BufferQueueLayer::getTransformToDisplayInverseLocked() const { +bool BufferQueueLayer::getTransformToDisplayInverse() const { return mConsumer->getTransformToDisplayInverse(); } @@ -131,7 +131,7 @@ nsecs_t BufferQueueLayer::getDesiredPresentTime() { return mConsumer->getTimestamp(); } -std::shared_ptr<FenceTime> BufferQueueLayer::getCurrentFenceTimeLocked() const { +std::shared_ptr<FenceTime> BufferQueueLayer::getCurrentFenceTime() const { return mConsumer->getCurrentFenceTime(); } @@ -192,7 +192,6 @@ bool BufferQueueLayer::getSidebandStreamChanged() const { std::optional<Region> BufferQueueLayer::latchSidebandStream(bool& recomputeVisibleRegions) { bool sidebandStreamChanged = true; - Mutex::Autolock lock(mStateMutex); if (mSidebandStreamChanged.compare_exchange_strong(sidebandStreamChanged, false)) { // mSidebandStreamChanged was changed to false // replicated in LayerBE until FE/BE is ready to be synchronized @@ -201,15 +200,15 @@ std::optional<Region> BufferQueueLayer::latchSidebandStream(bool& recomputeVisib setTransactionFlags(eTransactionNeeded); mFlinger->setTransactionFlags(eTraversalNeeded); } - recomputeVisibleRegions = true; + const State& s(getDrawingState()); - return getTransformLocked().transform(Region(Rect(s.active_legacy.w, s.active_legacy.h))); + return getTransform().transform(Region(Rect(s.active_legacy.w, s.active_legacy.h))); } return {}; } -bool BufferQueueLayer::hasFrameUpdateLocked() const { +bool BufferQueueLayer::hasFrameUpdate() const { return mQueuedFrames > 0; } @@ -229,18 +228,16 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t // buffer mode. bool queuedBuffer = false; const int32_t layerID = getSequence(); - status_t updateResult; - LayerRejecter r(mState.drawing, getCurrentState(), recomputeVisibleRegions, + LayerRejecter r(mDrawingState, getCurrentState(), recomputeVisibleRegions, getProducerStickyTransform() != 0, mName.string(), mOverrideScalingMode, - getTransformToDisplayInverseLocked(), mFreezeGeometryUpdates); + getTransformToDisplayInverse(), mFreezeGeometryUpdates); const nsecs_t expectedPresentTime = mFlinger->mUseScheduler ? mFlinger->mScheduler->mPrimaryDispSync->expectedPresentTime() : mFlinger->mPrimaryDispSync->expectedPresentTime(); - - updateResult = mConsumer->updateTexImage(&r, expectedPresentTime, &mAutoRefresh, &queuedBuffer, - mLastFrameNumberReceived, releaseFence); - + status_t updateResult = + mConsumer->updateTexImage(&r, expectedPresentTime, &mAutoRefresh, &queuedBuffer, + mLastFrameNumberReceived, releaseFence); if (updateResult == BufferQueue::PRESENT_LATER) { // Producer doesn't want buffer to be displayed yet. Signal a // layer update so we check again at the next opportunity. |