summaryrefslogtreecommitdiff
path: root/libs/gui/BufferQueueProducer.cpp
diff options
context:
space:
mode:
author Jim Shargo <jshargo@google.com> 2025-02-27 22:58:38 +0000
committer Jim Shargo <jshargo@google.com> 2025-03-11 21:17:16 +0000
commita62f051cfde464c9080e8c6b5d3a63f317a22e30 (patch)
tree22a68766b2800abbc3f9c919ea16618ec9f60de5 /libs/gui/BufferQueueProducer.cpp
parent6075c6ae67546cc2143f336b800d5bb6f46acfd7 (diff)
BufferQueues: Always respect setMaxDequeuedBufferCount
For some reason, this wouldn't be respected if no buffers had been queued. This could lead to surprising behavior of a (with unlimited buffers, essentially unbounded) buffers being dequeued for new BQs. This is flag gated to capture potential issues, since I'm worried about chesterton's fence. Bug: 399328309 Flag: com.android.graphics.libgui.flags.bq_always_use_max_dequeued_buffer_count Test: new tests Change-Id: I756eb4f621f6eec1a5bb43a490305018ec69c477
Diffstat (limited to 'libs/gui/BufferQueueProducer.cpp')
-rw-r--r--libs/gui/BufferQueueProducer.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index 5961b41478..bcf61e45de 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -364,8 +364,10 @@ status_t BufferQueueProducer::waitForFreeSlotThenRelock(FreeSlotCaller caller,
// Producers are not allowed to dequeue more than
// mMaxDequeuedBufferCount buffers.
// This check is only done if a buffer has already been queued
- if (mCore->mBufferHasBeenQueued &&
- dequeuedCount >= mCore->mMaxDequeuedBufferCount) {
+ using namespace com::android::graphics::libgui::flags;
+ bool flagGatedBufferHasBeenQueued =
+ bq_always_use_max_dequeued_buffer_count() || mCore->mBufferHasBeenQueued;
+ if (flagGatedBufferHasBeenQueued && dequeuedCount >= mCore->mMaxDequeuedBufferCount) {
// Supress error logs when timeout is non-negative.
if (mDequeueTimeout < 0) {
BQ_LOGE("%s: attempting to exceed the max dequeued buffer "