summaryrefslogtreecommitdiff
path: root/libs/gui/BufferQueueProducer.cpp
diff options
context:
space:
mode:
author Xin Li <delphij@google.com> 2024-12-13 11:15:16 -0800
committer Xin Li <delphij@google.com> 2024-12-13 11:15:16 -0800
commit2cb09d0f6045c1b0f20ec8045053195f88563bc0 (patch)
treea5daa8a1392d6223c17b604ca3672f647fa5dede /libs/gui/BufferQueueProducer.cpp
parenta3ff6f6ba4aaec8111f9309b3c0b655c8ef35a4d (diff)
parent52507b4b1670ea3e3a4061f1aedcbeff5c2e2970 (diff)
Merge 24Q4 into AOSP main
Bug: 370570306 Merged-In: I5ed05d0f5aa4c5e98fbd9b5275f3db39ccb76fed Change-Id: I039103d5231a77496213df3ede1fa5b1dd259a8d
Diffstat (limited to 'libs/gui/BufferQueueProducer.cpp')
-rw-r--r--libs/gui/BufferQueueProducer.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index ead9f0f014..831b2ee4be 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -45,7 +45,10 @@
#include <system/window.h>
+#include <com_android_graphics_libgui_flags.h>
+
namespace android {
+using namespace com::android::graphics::libgui;
// Macros for include BufferQueueCore information in log messages
#define BQ_LOGV(x, ...) \
@@ -924,6 +927,7 @@ status_t BufferQueueProducer::queueBuffer(int slot,
uint64_t currentFrameNumber = 0;
BufferItem item;
int connectedApi;
+ bool enableEglCpuThrottling = true;
sp<Fence> lastQueuedFence;
{ // Autolock scope
@@ -1097,6 +1101,9 @@ status_t BufferQueueProducer::queueBuffer(int slot,
VALIDATE_CONSISTENCY();
connectedApi = mCore->mConnectedApi;
+ if (flags::bq_producer_throttles_only_async_mode()) {
+ enableEglCpuThrottling = mCore->mAsyncMode || mCore->mDequeueBufferCannotBlock;
+ }
lastQueuedFence = std::move(mLastQueueBufferFence);
mLastQueueBufferFence = std::move(acquireFence);
@@ -1142,7 +1149,7 @@ status_t BufferQueueProducer::queueBuffer(int slot,
}
// Wait without lock held
- if (connectedApi == NATIVE_WINDOW_API_EGL) {
+ if (connectedApi == NATIVE_WINDOW_API_EGL && enableEglCpuThrottling) {
// Waiting here allows for two full buffers to be queued but not a
// third. In the event that frames take varying time, this makes a
// small trade-off in favor of latency rather than throughput.