From 42a94c6b3592f2aeddcbb39fa23c87136e5f1178 Mon Sep 17 00:00:00 2001 From: Sungtak Lee Date: Fri, 24 May 2019 14:27:14 -0700 Subject: BufferQueueProducer: fix buffer adjustment during setDequeueTimeout Adjust buffer during setDequeueTimeout() according to the expected future value of mDequeueBufferCannotBlock. Bug: 133208327 Change-Id: Ibc6b1dd6c3870c6c80e76279f1f104200a3d0241 --- libs/gui/BufferQueueProducer.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'libs/gui/BufferQueueProducer.cpp') diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index 96d75689eb..c20c2f3dca 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -1497,7 +1497,9 @@ status_t BufferQueueProducer::setDequeueTimeout(nsecs_t timeout) { BQ_LOGV("setDequeueTimeout: %" PRId64, timeout); std::lock_guard lock(mCore->mMutex); - int delta = mCore->getMaxBufferCountLocked(mCore->mAsyncMode, false, + bool dequeueBufferCannotBlock = + timeout >= 0 ? false : mCore->mDequeueBufferCannotBlock; + int delta = mCore->getMaxBufferCountLocked(mCore->mAsyncMode, dequeueBufferCannotBlock, mCore->mMaxBufferCount) - mCore->getMaxBufferCountLocked(); if (!mCore->adjustAvailableSlotsLocked(delta)) { BQ_LOGE("setDequeueTimeout: BufferQueue failed to adjust the number of " @@ -1506,11 +1508,9 @@ status_t BufferQueueProducer::setDequeueTimeout(nsecs_t timeout) { } mDequeueTimeout = timeout; - if (timeout >= 0) { - mCore->mDequeueBufferCannotBlock = false; - if (timeout != 0) { - mCore->mQueueBufferCanDrop = false; - } + mCore->mDequeueBufferCannotBlock = dequeueBufferCannotBlock; + if (timeout > 0) { + mCore->mQueueBufferCanDrop = false; } VALIDATE_CONSISTENCY(); -- cgit v1.2.3-59-g8ed1b