summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorJamie Gennis <jgennis@google.com>2012-09-04 14:58:50 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-09-04 14:58:51 -0700
commit493db47929cdd805339e453062fef265d8985692 (patch)
treed2d53c5b5942fd866324cb234430b8db3a1296e5 /libs
parente84ec393bb48e4817eaa280ee51c099af041b14c (diff)
parentc68f2ecfa02037144d1a3856f637a77f523cf416 (diff)
downloadframeworks_native-493db47929cdd805339e453062fef265d8985692.zip
frameworks_native-493db47929cdd805339e453062fef265d8985692.tar.gz
frameworks_native-493db47929cdd805339e453062fef265d8985692.tar.bz2
Merge "BufferQueue: add a setMaxAcquiredBufferCount check" into jb-mr1-dev
Diffstat (limited to 'libs')
-rw-r--r--libs/gui/BufferQueue.cpp5
-rw-r--r--libs/gui/tests/BufferQueue_test.cpp21
2 files changed, 26 insertions, 0 deletions
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index 4640149..2eee6f5 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -974,6 +974,11 @@ status_t BufferQueue::setDefaultMaxBufferCount(int bufferCount) {
status_t BufferQueue::setMaxAcquiredBufferCount(int maxAcquiredBuffers) {
ATRACE_CALL();
Mutex::Autolock lock(mMutex);
+ if (maxAcquiredBuffers < 1 || maxAcquiredBuffers > MAX_MAX_ACQUIRED_BUFFERS) {
+ ST_LOGE("setMaxAcquiredBufferCount: invalid count specified: %d",
+ maxAcquiredBuffers);
+ return BAD_VALUE;
+ }
if (mConnectedApi != NO_CONNECTED_API) {
return INVALID_OPERATION;
}
diff --git a/libs/gui/tests/BufferQueue_test.cpp b/libs/gui/tests/BufferQueue_test.cpp
index 8601789..817abb4 100644
--- a/libs/gui/tests/BufferQueue_test.cpp
+++ b/libs/gui/tests/BufferQueue_test.cpp
@@ -93,4 +93,25 @@ TEST_F(BufferQueueTest, AcquireBuffer_ExceedsMaxAcquireCount_Fails) {
ASSERT_EQ(INVALID_OPERATION, mBQ->acquireBuffer(&item));
}
+TEST_F(BufferQueueTest, SetMaxAcquiredBufferCountWithIllegalValues_ReturnsError) {
+ sp<DummyConsumer> dc(new DummyConsumer);
+ mBQ->consumerConnect(dc);
+
+ ASSERT_EQ(BAD_VALUE, mBQ->setMaxAcquiredBufferCount(0));
+ ASSERT_EQ(BAD_VALUE, mBQ->setMaxAcquiredBufferCount(-3));
+ ASSERT_EQ(BAD_VALUE, mBQ->setMaxAcquiredBufferCount(
+ BufferQueue::MAX_MAX_ACQUIRED_BUFFERS+1));
+ ASSERT_EQ(BAD_VALUE, mBQ->setMaxAcquiredBufferCount(100));
+}
+
+TEST_F(BufferQueueTest, SetMaxAcquiredBufferCountWithLegalValues_Succeeds) {
+ sp<DummyConsumer> dc(new DummyConsumer);
+ mBQ->consumerConnect(dc);
+
+ ASSERT_EQ(OK, mBQ->setMaxAcquiredBufferCount(1));
+ ASSERT_EQ(OK, mBQ->setMaxAcquiredBufferCount(2));
+ ASSERT_EQ(OK, mBQ->setMaxAcquiredBufferCount(
+ BufferQueue::MAX_MAX_ACQUIRED_BUFFERS));
+}
+
} // namespace android