summaryrefslogtreecommitdiff
path: root/libs/gui/BufferQueue.cpp
diff options
context:
space:
mode:
author Mathias Agopian <mathias@google.com> 2012-04-09 17:35:00 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2012-04-09 17:35:00 -0700
commitd5caca1d0d0a57b4a279a51717d97ee146f00ebd (patch)
treebc2e5afea03c4630277537dab9193ce5091b3963 /libs/gui/BufferQueue.cpp
parent3a77871383bc1a03cc866686d81628493d14de7c (diff)
parentabe61bfda4938abd932465e27c29ba9e41aea606 (diff)
Merge "BufferQueue no longer hardcodes buffer counts"
Diffstat (limited to 'libs/gui/BufferQueue.cpp')
-rw-r--r--libs/gui/BufferQueue.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index 2d042c83c2..84ccb3fecc 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -69,13 +69,16 @@ static int32_t createProcessUniqueId() {
return android_atomic_inc(&globalCounter);
}
-BufferQueue::BufferQueue( bool allowSynchronousMode ) :
+BufferQueue::BufferQueue( bool allowSynchronousMode, int bufferCount ) :
mDefaultWidth(1),
mDefaultHeight(1),
mPixelFormat(PIXEL_FORMAT_RGBA_8888),
- mBufferCount(MIN_ASYNC_BUFFER_SLOTS),
+ mMinUndequeuedBuffers(bufferCount),
+ mMinAsyncBufferSlots(bufferCount + 1),
+ mMinSyncBufferSlots(bufferCount),
+ mBufferCount(mMinAsyncBufferSlots),
mClientBufferCount(0),
- mServerBufferCount(MIN_ASYNC_BUFFER_SLOTS),
+ mServerBufferCount(mMinAsyncBufferSlots),
mSynchronousMode(false),
mAllowSynchronousMode(allowSynchronousMode),
mConnectedApi(NO_CONNECTED_API),
@@ -92,6 +95,9 @@ BufferQueue::BufferQueue( bool allowSynchronousMode ) :
ST_LOGV("BufferQueue");
sp<ISurfaceComposer> composer(ComposerService::getComposerService());
mGraphicBufferAlloc = composer->createGraphicBufferAlloc();
+ if (mGraphicBufferAlloc == 0) {
+ ST_LOGE("createGraphicBufferAlloc() failed in BufferQueue()");
+ }
}
BufferQueue::~BufferQueue() {
@@ -186,7 +192,7 @@ status_t BufferQueue::setBufferCount(int bufferCount) {
}
const int minBufferSlots = mSynchronousMode ?
- MIN_SYNC_BUFFER_SLOTS : MIN_ASYNC_BUFFER_SLOTS;
+ mMinSyncBufferSlots : mMinAsyncBufferSlots;
if (bufferCount == 0) {
mClientBufferCount = 0;
bufferCount = (mServerBufferCount >= minBufferSlots) ?
@@ -241,7 +247,7 @@ int BufferQueue::query(int what, int* outValue)
break;
case NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS:
value = mSynchronousMode ?
- (MIN_UNDEQUEUED_BUFFERS-1) : MIN_UNDEQUEUED_BUFFERS;
+ (mMinUndequeuedBuffers-1) : mMinUndequeuedBuffers;
break;
default:
return BAD_VALUE;
@@ -317,7 +323,7 @@ status_t BufferQueue::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
// wait on mDequeueCondition.
const int minBufferCountNeeded = mSynchronousMode ?
- MIN_SYNC_BUFFER_SLOTS : MIN_ASYNC_BUFFER_SLOTS;
+ mMinSyncBufferSlots : mMinAsyncBufferSlots;
const bool numberOfBuffersNeedsToChange = !mClientBufferCount &&
((mServerBufferCount != mBufferCount) ||
@@ -384,15 +390,15 @@ status_t BufferQueue::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
// See whether a buffer has been queued since the last
// setBufferCount so we know whether to perform the
- // MIN_UNDEQUEUED_BUFFERS check below.
+ // mMinUndequeuedBuffers check below.
if (mBufferHasBeenQueued) {
// make sure the client is not trying to dequeue more buffers
// than allowed.
const int avail = mBufferCount - (dequeuedCount+1);
- if (avail < (MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode))) {
- ST_LOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded "
+ if (avail < (mMinUndequeuedBuffers-int(mSynchronousMode))) {
+ ST_LOGE("dequeueBuffer: mMinUndequeuedBuffers=%d exceeded "
"(dequeued=%d)",
- MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode),
+ mMinUndequeuedBuffers-int(mSynchronousMode),
dequeuedCount);
return -EBUSY;
}