summaryrefslogtreecommitdiffstats
path: root/include/gui/BufferQueueCore.h
diff options
context:
space:
mode:
authorDan Stoza <stoza@google.com>2015-04-28 14:42:06 -0700
committerDan Stoza <stoza@google.com>2015-05-01 12:23:44 -0700
commitecc504043fddb7a75042ce402c67aedfac04d5e2 (patch)
treeef6b8080362a8655a3291e5757dd72d202701898 /include/gui/BufferQueueCore.h
parent7b2fc930077b1e6ca5946cae6834902318209474 (diff)
downloadframeworks_native-ecc504043fddb7a75042ce402c67aedfac04d5e2.zip
frameworks_native-ecc504043fddb7a75042ce402c67aedfac04d5e2.tar.gz
frameworks_native-ecc504043fddb7a75042ce402c67aedfac04d5e2.tar.bz2
SurfaceFlinger: Fix PTS on stale buffers
SurfaceFlinger's (Layer's) shadow copy of the BufferQueue queue was getting out of sync for a few reasons. This change fixes these by doing the following: - Adds a check to re-synchronize the shadow copy every time we successfully acquire a buffer by first dropping stale buffers before removing the current buffer. - Avoids trying to perform updates for buffers which have been rejected (for incorrect dimensions) by SurfaceFlinger. - Adds IGraphicBufferConsumer::setShadowQueueSize, which allows the consumer to notify the BufferQueue that it is maintaining a shadow copy of the queue and prevents it from dropping so many buffers during acquireBuffer that it ends up returning a buffer for which the consumer has not yet received an onFrameAvailable call. Bug: 20096136 Change-Id: I78d0738428005fc19b3be85cc8f1db498043612f (cherry picked from commit 2e36f2283f48ab764b496490c73a132acf21df3a)
Diffstat (limited to 'include/gui/BufferQueueCore.h')
-rw-r--r--include/gui/BufferQueueCore.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/include/gui/BufferQueueCore.h b/include/gui/BufferQueueCore.h
index e3624b7..a22015c 100644
--- a/include/gui/BufferQueueCore.h
+++ b/include/gui/BufferQueueCore.h
@@ -274,6 +274,13 @@ private:
// mBufferAge tracks the age of the contents of the most recently dequeued
// buffer as the number of frames that have elapsed since it was last queued
uint64_t mBufferAge;
+
+ // mConsumerHasShadowQueue determines if acquireBuffer should be more
+ // cautious about dropping buffers so that it always returns a buffer that
+ // is represented in the consumer's shadow queue.
+ bool mConsumerHasShadowQueue;
+ size_t mConsumerShadowQueueSize;
+
}; // class BufferQueueCore
} // namespace android