diff options
| author | 2021-05-18 00:31:00 +0000 | |
|---|---|---|
| committer | 2021-05-18 00:31:00 +0000 | |
| commit | 837d98ebfa0553d66b696bcd3de764eb5ecf3066 (patch) | |
| tree | c34d9306f8a12b89fb832a29e61f87527f6924f6 /libs | |
| parent | 4d7a06614c57cf564fa61fc671bbdf7e7c739cff (diff) | |
| parent | 82d07c9e4561ec7adc9340207d25b59b7926c3c9 (diff) | |
Merge "BBQSurface: Give client a chance to observe transform hint earlier" into sc-dev
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/gui/BLASTBufferQueue.cpp | 21 | ||||
| -rw-r--r-- | libs/gui/Surface.cpp | 4 | ||||
| -rw-r--r-- | libs/gui/include/gui/BLASTBufferQueue.h | 2 | ||||
| -rw-r--r-- | libs/gui/include/gui/Surface.h | 3 |
4 files changed, 27 insertions, 3 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index 08800f7a85..a2868c6143 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -317,6 +317,11 @@ void BLASTBufferQueue::releaseBufferCallback(uint64_t graphicBufferId, std::unique_lock _lock{mMutex}; BQA_LOGV("releaseBufferCallback graphicBufferId=%" PRIu64, graphicBufferId); + if (mSurfaceControl != nullptr) { + mTransformHint = mSurfaceControl->getTransformHint(); + mBufferItemConsumer->setTransformHint(mTransformHint); + } + auto it = mSubmitted.find(graphicBufferId); if (it == mSubmitted.end()) { BQA_LOGE("ERROR: releaseBufferCallback without corresponding submitted buffer %" PRIu64, @@ -596,6 +601,14 @@ public: status_t setFrameTimelineInfo(const FrameTimelineInfo& frameTimelineInfo) override { return mBbq->setFrameTimelineInfo(frameTimelineInfo); } + protected: + uint32_t getTransformHint() const override { + if (mStickyTransform == 0 && !transformToDisplayInverse()) { + return mBbq->getLastTransformHint(); + } else { + return 0; + } + } }; // TODO: Can we coalesce this with frame updates? Need to confirm @@ -765,4 +778,12 @@ PixelFormat BLASTBufferQueue::convertBufferFormat(PixelFormat& format) { return convertedFormat; } +uint32_t BLASTBufferQueue::getLastTransformHint() const { + if (mSurfaceControl != nullptr) { + return mSurfaceControl->getTransformHint(); + } else { + return 0; + } +} + } // namespace android diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 2fc9d47b89..83aaf36a8d 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -1288,7 +1288,7 @@ int Surface::query(int what, int* value) const { mUserHeight ? mUserHeight : mDefaultHeight); return NO_ERROR; case NATIVE_WINDOW_TRANSFORM_HINT: - *value = static_cast<int>(mTransformHint); + *value = static_cast<int>(getTransformHint()); return NO_ERROR; case NATIVE_WINDOW_CONSUMER_RUNNING_BEHIND: { status_t err = NO_ERROR; @@ -1822,7 +1822,7 @@ int Surface::dispatchGetExtraBufferCount(va_list args) { return getExtraBufferCount(extraBuffers); } -bool Surface::transformToDisplayInverse() { +bool Surface::transformToDisplayInverse() const { return (mTransform & NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY) == NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY; } diff --git a/libs/gui/include/gui/BLASTBufferQueue.h b/libs/gui/include/gui/BLASTBufferQueue.h index 139dbb7f6b..c4ca399e37 100644 --- a/libs/gui/include/gui/BLASTBufferQueue.h +++ b/libs/gui/include/gui/BLASTBufferQueue.h @@ -103,6 +103,8 @@ public: void setSidebandStream(const sp<NativeHandle>& stream); + uint32_t getLastTransformHint() const; + virtual ~BLASTBufferQueue(); private: diff --git a/libs/gui/include/gui/Surface.h b/libs/gui/include/gui/Surface.h index d22bdaaa98..89e1909a45 100644 --- a/libs/gui/include/gui/Surface.h +++ b/libs/gui/include/gui/Surface.h @@ -278,7 +278,6 @@ private: int dispatchGetLastQueuedBuffer(va_list args); int dispatchSetFrameTimelineInfo(va_list args); int dispatchGetExtraBufferCount(va_list args); - bool transformToDisplayInverse(); protected: virtual int dequeueBuffer(ANativeWindowBuffer** buffer, int* fenceFd); @@ -490,6 +489,8 @@ protected: // mTransformHint is the transform probably applied to buffers of this // window. this is only a hint, actual transform may differ. uint32_t mTransformHint; + virtual uint32_t getTransformHint() const { return mTransformHint; } + bool transformToDisplayInverse() const; // mProducerControlledByApp whether this buffer producer is controlled // by the application |