fix a bug when reallocating a window's buffers is needed
we need to mark the buffers that need to be reallocated, NOT the buffer's indices. Change-Id: I809e2e1b03b56c4d2ab983c25523dae99aa1da74
This commit is contained in:
parent
5ed37d3343
commit
a0b3f1d2eb
|
@ -303,6 +303,7 @@ private:
|
||||||
: mCapacity(c), mList(0) { }
|
: mCapacity(c), mList(0) { }
|
||||||
status_t add(int value);
|
status_t add(int value);
|
||||||
status_t remove(int value);
|
status_t remove(int value);
|
||||||
|
uint32_t getMask() const { return mList; }
|
||||||
|
|
||||||
class const_iterator {
|
class const_iterator {
|
||||||
friend class BufferList;
|
friend class BufferList;
|
||||||
|
|
|
@ -440,7 +440,7 @@ status_t SharedBufferClient::queue(int buf)
|
||||||
bool SharedBufferClient::needNewBuffer(int buf) const
|
bool SharedBufferClient::needNewBuffer(int buf) const
|
||||||
{
|
{
|
||||||
SharedBufferStack& stack( *mSharedStack );
|
SharedBufferStack& stack( *mSharedStack );
|
||||||
const uint32_t mask = 1<<buf;
|
const uint32_t mask = 1<<(31-buf);
|
||||||
return (android_atomic_and(~mask, &stack.reallocMask) & mask) != 0;
|
return (android_atomic_and(~mask, &stack.reallocMask) & mask) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,7 +532,7 @@ status_t SharedBufferServer::reallocate()
|
||||||
RWLock::AutoRLock _l(mLock);
|
RWLock::AutoRLock _l(mLock);
|
||||||
|
|
||||||
SharedBufferStack& stack( *mSharedStack );
|
SharedBufferStack& stack( *mSharedStack );
|
||||||
uint32_t mask = (1<<mNumBuffers)-1;
|
uint32_t mask = mBufferList.getMask();
|
||||||
android_atomic_or(mask, &stack.reallocMask);
|
android_atomic_or(mask, &stack.reallocMask);
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue