From ff95aabbcc6e8606acbd7933c90eeb9b8b382a21 Mon Sep 17 00:00:00 2001 From: Pablo Ceballos Date: Wed, 13 Jan 2016 17:09:58 -0800 Subject: Add interface for controlling single buffer auto refresh - Adds a boolean to BufferQueue that controls whether or not auto refresh is enabled in SurfaceFlinger when in single buffer mode. - Adds plumbing up to ANativeWindow. - When enabled, it will cache the shared buffer slot in Surface in order to prevent the Binder transaction with SurfaceFlinger. Bug 24940410 Change-Id: I83142afdc00e203f198a32288f071d926f8fda95 --- libs/gui/BufferQueueProducer.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'libs/gui/BufferQueueProducer.cpp') diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index 9d4246482c..e065e6151d 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -806,8 +806,8 @@ status_t BufferQueueProducer::queueBuffer(int slot, mCore->mDequeueBufferCannotBlock || (mCore->mSingleBufferMode && mCore->mSingleBufferSlot == slot); item.mSurfaceDamage = surfaceDamage; - item.mSingleBufferMode = mCore->mSingleBufferMode; item.mQueuedBuffer = true; + item.mAutoRefresh = mCore->mSingleBufferMode && mCore->mAutoRefresh; mStickyTransform = stickyTransform; @@ -1309,6 +1309,16 @@ status_t BufferQueueProducer::setSingleBufferMode(bool singleBufferMode) { return NO_ERROR; } +status_t BufferQueueProducer::setAutoRefresh(bool autoRefresh) { + ATRACE_CALL(); + BQ_LOGV("setAutoRefresh: %d", autoRefresh); + + Mutex::Autolock lock(mCore->mMutex); + + mCore->mAutoRefresh = autoRefresh; + return NO_ERROR; +} + status_t BufferQueueProducer::setDequeueTimeout(nsecs_t timeout) { ATRACE_CALL(); BQ_LOGV("setDequeueTimeout: %" PRId64, timeout); -- cgit v1.2.3-59-g8ed1b