summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jorim Jaggi <jjaggi@google.com> 2020-12-02 22:51:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-12-02 22:51:57 +0000
commit7e2bbfa24aa4c88ead367ade153c258a167aed91 (patch)
treef9713ee272ac59560a43ca6f7b4c04996255697d
parenta859b8bea88a688432dd448b8a444526a142ab67 (diff)
parenta3fe67b0397113b0325fc1824d127c049f96aaf5 (diff)
Merge "Fix vsyncId for long frames and double stuffed"
-rw-r--r--libs/gui/BLASTBufferQueue.cpp11
-rw-r--r--libs/gui/include/gui/BLASTBufferQueue.h3
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