diff options
| author | Mathias Agopian <mathias@google.com> | 2010-05-17 18:54:19 -0700 |
|---|---|---|
| committer | Mathias Agopian <mathias@google.com> | 2010-05-17 18:54:19 -0700 |
| commit | be6c8fc4d5f8144cbfc715da0d2ef3c704db279d (patch) | |
| tree | 94899c9146765d814bf7bb81e1e7a2954ad24499 /libs/surfaceflinger_client | |
| parent | cd30f4f849bb215509bd2645726048271b5db01e (diff) | |
| download | frameworks_base-be6c8fc4d5f8144cbfc715da0d2ef3c704db279d.zip frameworks_base-be6c8fc4d5f8144cbfc715da0d2ef3c704db279d.tar.gz frameworks_base-be6c8fc4d5f8144cbfc715da0d2ef3c704db279d.tar.bz2 | |
fix a bug where queueBuffer() would fail after the SharedbufferStack is resized
Change-Id: I12bf13a62018ce1349bab7be0b0cad7fad13fee8
Diffstat (limited to 'libs/surfaceflinger_client')
| -rw-r--r-- | libs/surfaceflinger_client/SharedBufferStack.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libs/surfaceflinger_client/SharedBufferStack.cpp b/libs/surfaceflinger_client/SharedBufferStack.cpp index 5705748..dab8ed8 100644 --- a/libs/surfaceflinger_client/SharedBufferStack.cpp +++ b/libs/surfaceflinger_client/SharedBufferStack.cpp @@ -182,10 +182,22 @@ String8 SharedBufferBase::dump(char const* prefix) const int tail = computeTail(); snprintf(buffer, SIZE, "%s[ head=%2d, available=%2d, queued=%2d, tail=%2d ] " - "reallocMask=%08x, inUse=%2d, identity=%d, status=%d\n", + "reallocMask=%08x, inUse=%2d, identity=%d, status=%d", prefix, stack.head, stack.available, stack.queued, tail, stack.reallocMask, stack.inUse, stack.identity, stack.status); result.append(buffer); + + snprintf(buffer, SIZE, " { "); + result.append(buffer); + + for (int i=0 ; i<mNumBuffers ; i++) { + snprintf(buffer, SIZE, "%d ", stack.index[i]); + result.append(buffer); + } + + snprintf(buffer, SIZE, " }\n"); + result.append(buffer); + return result; } @@ -323,6 +335,7 @@ ssize_t SharedBufferServer::RetireUpdate::operator()() { // lock the buffer before advancing head, which automatically unlocks // the buffer we preventively locked upon entering this function + head = (head + 1) % numBuffers; android_atomic_write(stack.index[head], &stack.inUse); @@ -416,7 +429,7 @@ status_t SharedBufferClient::queue(int buf) { SharedBufferStack& stack( *mSharedStack ); - queued_head = ((queued_head+1 >= mNumBuffers) ? 0 : queued_head+1); + queued_head = (queued_head + 1) % mNumBuffers; stack.index[queued_head] = buf; QueueUpdate update(this); @@ -449,9 +462,11 @@ status_t SharedBufferClient::setDirtyRegion(int buf, const Region& reg) status_t SharedBufferClient::setBufferCount(int bufferCount) { + SharedBufferStack& stack( *mSharedStack ); if (uint32_t(bufferCount) >= NUM_BUFFER_MAX) return BAD_VALUE; mNumBuffers = bufferCount; + queued_head = (stack.head + stack.queued) % mNumBuffers; return NO_ERROR; } |
