summaryrefslogtreecommitdiff
path: root/libs/gui/BLASTBufferQueue.cpp
diff options
context:
space:
mode:
author Alex Chau <alexchau@google.com> 2021-12-07 10:48:52 +0000
committer Vishnu Nair <vishnun@google.com> 2021-12-07 16:42:42 +0000
commitcf6b4b407baea63d4d4283014ec81847ae186e22 (patch)
treef3f829e1497f8f5169321749276d4c1c276f524d /libs/gui/BLASTBufferQueue.cpp
parent9b671e37c2e8ee57bb301295cacd0ece284f549e (diff)
Revert "BBQ: Clean up acquire states on BQ disconnect"
This reverts commit fab15e55446080bdcfc05ba315e8ef914b0a6f65. Reason for revert: http://b/197269223#comment40 Change-Id: I8f34028844faa6b59f1a8ffc46dcf9d353ad9500
Diffstat (limited to 'libs/gui/BLASTBufferQueue.cpp')
-rw-r--r--libs/gui/BLASTBufferQueue.cpp72
1 files changed, 7 insertions, 65 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index 0c71bcd8cc..dd50ca7fff 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -58,22 +58,13 @@ namespace android {
ALOGE("[%s](f:%u,a:%u) " x, mName.c_str(), mNumFrameAvailable, mNumAcquired, ##__VA_ARGS__)
void BLASTBufferItemConsumer::onDisconnect() {
- {
- Mutex::Autolock lock(mMutex);
- mPreviouslyConnected = mCurrentlyConnected;
- mCurrentlyConnected = false;
- if (mPreviouslyConnected) {
- mDisconnectEvents.push(mCurrentFrameNumber);
- }
- mFrameEventHistory.onDisconnect();
- }
-
- {
- std::scoped_lock lock(mBufferQueueMutex);
- if (mBLASTBufferQueue != nullptr) {
- mBLASTBufferQueue->onProducerDisconnect();
- }
+ Mutex::Autolock lock(mMutex);
+ mPreviouslyConnected = mCurrentlyConnected;
+ mCurrentlyConnected = false;
+ if (mPreviouslyConnected) {
+ mDisconnectEvents.push(mCurrentFrameNumber);
}
+ mFrameEventHistory.onDisconnect();
}
void BLASTBufferItemConsumer::addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps,
@@ -211,11 +202,7 @@ void BLASTBufferQueue::update(const sp<SurfaceControl>& surface, uint32_t width,
}
SurfaceComposerClient::Transaction t;
- bool setBackpressureFlag = false;
- if (!SurfaceControl::isSameSurface(mSurfaceControl, surface)) {
- mSurfaceControlSwapCount++;
- setBackpressureFlag = true;
- }
+ const bool setBackpressureFlag = !SurfaceControl::isSameSurface(mSurfaceControl, surface);
bool applyTransaction = false;
// Always update the native object even though they might have the same layer handle, so we can
@@ -401,19 +388,6 @@ void BLASTBufferQueue::releaseBufferCallback(
std::unique_lock _lock{mMutex};
BQA_LOGV("releaseBufferCallback %s", id.to_string().c_str());
- const auto it = mFreedBuffers.find(id);
- if (it != mFreedBuffers.end()) {
- mFreedBuffers.erase(it);
- BQA_LOGV("releaseBufferCallback ignoring freed buffer %s", id.to_string().c_str());
- return;
- }
-
- if (mFreedBuffers.size() != 0 && mLogMissingReleaseCallback) {
- BQA_LOGD("Unexpected out of order buffer release. mFreedBuffer count=%d",
- static_cast<uint32_t>(mFreedBuffers.size()));
- mLogMissingReleaseCallback = false;
- }
-
// Calculate how many buffers we need to hold before we release them back
// to the buffer queue. This will prevent higher latency when we are running
// on a lower refresh rate than the max supported. We only do that for EGL
@@ -647,11 +621,6 @@ void BLASTBufferQueue::flushAndWaitForFreeBuffer(std::unique_lock<std::mutex>& l
void BLASTBufferQueue::onFrameAvailable(const BufferItem& item) {
ATRACE_CALL();
std::unique_lock _lock{mMutex};
- if ((mSurfaceControlSwapCount > mProducerDisconnectCount) && mLogScSwap) {
- BQA_LOGD("Expected producer disconnect sc swap count=%d bq disconnect count=%d",
- mSurfaceControlSwapCount, mProducerDisconnectCount);
- mLogScSwap = false;
- }
const bool syncTransactionSet = mSyncTransaction != nullptr;
BQA_LOGV("onFrameAvailable-start syncTransactionSet=%s", boolToString(syncTransactionSet));
@@ -1031,31 +1000,4 @@ uint64_t BLASTBufferQueue::getLastAcquiredFrameNum() {
return mLastAcquiredFrameNumber;
}
-// When the producer disconnects, all buffers in the queue will be freed. So clean up the bbq
-// acquire state and handle any pending release callbacks. If we do get a release callback for a
-// pending buffer for a disconnected queue, we cannot release the buffer back to the queue. So track
-// these separately and drop the release callbacks as they come.
-
-// Transaction callbacks are still expected to come in the order they were submitted regardless of
-// buffer queue state. So we can continue to handles the pending transactions and transaction
-// complete callbacks. When the queue is reconnected, the queue will increment the framenumbers
-// starting from the last queued framenumber.
-void BLASTBufferQueue::onProducerDisconnect() {
- BQA_LOGV("onProducerDisconnect");
- std::scoped_lock _lock{mMutex};
- // reset counts since the queue has been disconnected and all buffers have been freed.
- mNumFrameAvailable = 0;
- mNumAcquired = 0;
-
- // Track submitted buffers in a different container so we can handle any pending release buffer
- // callbacks without affecting the BBQ acquire state.
- mFreedBuffers.insert(mSubmitted.begin(), mSubmitted.end());
- mSubmitted.clear();
- mPendingRelease.clear();
- mProducerDisconnectCount++;
- mCallbackCV.notify_all();
- mLogMissingReleaseCallback = true;
- mLogScSwap = true;
-}
-
} // namespace android