diff options
| author | 2021-06-30 01:31:26 +0000 | |
|---|---|---|
| committer | 2021-06-30 01:31:26 +0000 | |
| commit | e89521f7c24f04045b2bbf6cb73857e17381ff9e (patch) | |
| tree | 146887303f7fe86b1c7a94b744530bd0da223e1d /libs/gui/BLASTBufferQueue.cpp | |
| parent | 4019c52f68e694278e1f5833a45a04137af3780c (diff) | |
| parent | 5fa91c276a6f67a33effceee27ef91d2cd935002 (diff) | |
Merge "BBQ: Update the transform hint if the SC layer handle does not change" into sc-dev
Diffstat (limited to 'libs/gui/BLASTBufferQueue.cpp')
| -rw-r--r-- | libs/gui/BLASTBufferQueue.cpp | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index 29701168e7..ac8feaa0c2 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -197,15 +197,18 @@ void BLASTBufferQueue::update(const sp<SurfaceControl>& surface, uint32_t width,      }      SurfaceComposerClient::Transaction t; +    const bool setBackpressureFlag = !SurfaceControl::isSameSurface(mSurfaceControl, surface);      bool applyTransaction = false; -    if (!SurfaceControl::isSameSurface(mSurfaceControl, surface)) { -        mSurfaceControl = surface; -        t.setFlags(mSurfaceControl, layer_state_t::eEnableBackpressure, -                   layer_state_t::eEnableBackpressure); -        applyTransaction = true; -    } +    // Always update the native object even though they might have the same layer handle, so we can +    // get the updated transform hint from WM. +    mSurfaceControl = surface;      if (mSurfaceControl != nullptr) { +        if (setBackpressureFlag) { +            t.setFlags(mSurfaceControl, layer_state_t::eEnableBackpressure, +                       layer_state_t::eEnableBackpressure); +            applyTransaction = true; +        }          mTransformHint = mSurfaceControl->getTransformHint();          mBufferItemConsumer->setTransformHint(mTransformHint);      } @@ -221,7 +224,7 @@ void BLASTBufferQueue::update(const sp<SurfaceControl>& surface, uint32_t width,              // We only need to update the scale if we've received at least one buffer. The reason              // for this is the scale is calculated based on the requested size and buffer size.              // If there's no buffer, the scale will always be 1. -            if (mLastBufferInfo.hasBuffer) { +            if (mSurfaceControl != nullptr && mLastBufferInfo.hasBuffer) {                  t.setDestinationFrame(mSurfaceControl,                                        Rect(0, 0, newSize.getWidth(), newSize.getHeight()));              }  |