diff options
| author | 2020-12-02 22:51:57 +0000 | |
|---|---|---|
| committer | 2020-12-02 22:51:57 +0000 | |
| commit | 7e2bbfa24aa4c88ead367ade153c258a167aed91 (patch) | |
| tree | f9713ee272ac59560a43ca6f7b4c04996255697d | |
| parent | a859b8bea88a688432dd448b8a444526a142ab67 (diff) | |
| parent | a3fe67b0397113b0325fc1824d127c049f96aaf5 (diff) | |
Merge "Fix vsyncId for long frames and double stuffed"
| -rw-r--r-- | libs/gui/BLASTBufferQueue.cpp | 11 | ||||
| -rw-r--r-- | libs/gui/include/gui/BLASTBufferQueue.h | 3 |
2 files changed, 10 insertions, 4 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index e6aa02a8fe..3a3a96fc32 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -289,6 +289,11 @@ void BLASTBufferQueue::processNextBufferLocked(bool useNextTransaction) { t->setDesiredPresentTime(bufferItem.mTimestamp); t->setFrameNumber(mSurfaceControl, bufferItem.mFrameNumber); + if (!mNextFrameTimelineVsyncIdQueue.empty()) { + t->setFrameTimelineVsync(mSurfaceControl, mNextFrameTimelineVsyncIdQueue.front()); + mNextFrameTimelineVsyncIdQueue.pop(); + } + if (mAutoRefresh != bufferItem.mAutoRefresh) { t->setAutoRefresh(mSurfaceControl, bufferItem.mAutoRefresh); mAutoRefresh = bufferItem.mAutoRefresh; @@ -417,10 +422,8 @@ status_t BLASTBufferQueue::setFrameRate(float frameRate, int8_t compatibility, status_t BLASTBufferQueue::setFrameTimelineVsync(int64_t frameTimelineVsyncId) { std::unique_lock _lock{mMutex}; - SurfaceComposerClient::Transaction t; - - return t.setFrameTimelineVsync(mSurfaceControl, frameTimelineVsyncId) - .apply(); + mNextFrameTimelineVsyncIdQueue.push(frameTimelineVsyncId); + return OK; } sp<Surface> BLASTBufferQueue::getSurface(bool includeSurfaceControlHandle) { diff --git a/libs/gui/include/gui/BLASTBufferQueue.h b/libs/gui/include/gui/BLASTBufferQueue.h index 9fb7d6fd36..bdf128a538 100644 --- a/libs/gui/include/gui/BLASTBufferQueue.h +++ b/libs/gui/include/gui/BLASTBufferQueue.h @@ -28,6 +28,7 @@ #include <system/window.h> #include <thread> +#include <queue> namespace android { @@ -143,6 +144,8 @@ private: // should acquire the next frame as soon as it can and not wait for a frame to become available. // This is only relevant for shared buffer mode. bool mAutoRefresh GUARDED_BY(mMutex) = false; + + std::queue<int64_t> mNextFrameTimelineVsyncIdQueue GUARDED_BY(mMutex); }; } // namespace android |