summaryrefslogtreecommitdiff
path: root/libs/gui/ConsumerBase.cpp
diff options
context:
space:
mode:
author Mathias Agopian <mathias@google.com> 2013-08-02 01:40:18 -0700
committer Mathias Agopian <mathias@google.com> 2013-08-06 20:05:36 +0000
commitdb89edc94bd2a78226b407f9f7261e202e7fa325 (patch)
tree007ffcc43a42459a5a089d3be8c51f81d40dd096 /libs/gui/ConsumerBase.cpp
parent687821c05b5a85db1b172e7599861c803d268a8d (diff)
All consumers now take an IGraphicBufferConsumer instead of a BufferQueue
this means they only have access to the consumer end of the interface. we had a lot of code that assumed consumers where holding a BufferQueue (i.e.: both ends), so most of this change is untangling in fix that Bug: 9265647 Change-Id: Ic2e2596ee14c7535f51bf26d9a897a0fc036d22c
Diffstat (limited to 'libs/gui/ConsumerBase.cpp')
-rw-r--r--libs/gui/ConsumerBase.cpp26
1 files changed, 10 insertions, 16 deletions
diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp
index d748786d98..c4ec8578a8 100644
--- a/libs/gui/ConsumerBase.cpp
+++ b/libs/gui/ConsumerBase.cpp
@@ -51,9 +51,9 @@ static int32_t createProcessUniqueId() {
return android_atomic_inc(&globalCounter);
}
-ConsumerBase::ConsumerBase(const sp<BufferQueue>& bufferQueue, bool controlledByApp) :
+ConsumerBase::ConsumerBase(const sp<IGraphicBufferConsumer>& bufferQueue, bool controlledByApp) :
mAbandoned(false),
- mBufferQueue(bufferQueue) {
+ mConsumer(bufferQueue) {
// Choose a name using the PID and a process-unique ID.
mName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId());
@@ -64,12 +64,12 @@ ConsumerBase::ConsumerBase(const sp<BufferQueue>& bufferQueue, bool controlledBy
wp<ConsumerListener> listener = static_cast<ConsumerListener*>(this);
sp<IConsumerListener> proxy = new BufferQueue::ProxyConsumerListener(listener);
- status_t err = mBufferQueue->consumerConnect(proxy, controlledByApp);
+ status_t err = mConsumer->consumerConnect(proxy, controlledByApp);
if (err != NO_ERROR) {
CB_LOGE("ConsumerBase: error connecting to BufferQueue: %s (%d)",
strerror(-err), err);
} else {
- mBufferQueue->setConsumerName(mName);
+ mConsumer->setConsumerName(mName);
}
}
@@ -96,12 +96,6 @@ void ConsumerBase::freeBufferLocked(int slotIndex) {
mSlots[slotIndex].mFrameNumber = 0;
}
-// Used for refactoring, should not be in final interface
-sp<BufferQueue> ConsumerBase::getBufferQueue() const {
- Mutex::Autolock lock(mMutex);
- return mBufferQueue;
-}
-
void ConsumerBase::onFrameAvailable() {
CB_LOGV("onFrameAvailable");
@@ -128,7 +122,7 @@ void ConsumerBase::onBuffersReleased() {
}
uint32_t mask = 0;
- mBufferQueue->getReleasedBuffers(&mask);
+ mConsumer->getReleasedBuffers(&mask);
for (int i = 0; i < BufferQueue::NUM_BUFFER_SLOTS; i++) {
if (mask & (1 << i)) {
freeBufferLocked(i);
@@ -152,8 +146,8 @@ void ConsumerBase::abandonLocked() {
freeBufferLocked(i);
}
// disconnect from the BufferQueue
- mBufferQueue->consumerDisconnect();
- mBufferQueue.clear();
+ mConsumer->consumerDisconnect();
+ mConsumer.clear();
}
void ConsumerBase::setFrameAvailableListener(
@@ -176,13 +170,13 @@ void ConsumerBase::dumpLocked(String8& result, const char* prefix) const {
result.appendFormat("%smAbandoned=%d\n", prefix, int(mAbandoned));
if (!mAbandoned) {
- mBufferQueue->dump(result, prefix);
+ mConsumer->dump(result, prefix);
}
}
status_t ConsumerBase::acquireBufferLocked(BufferQueue::BufferItem *item,
nsecs_t presentWhen) {
- status_t err = mBufferQueue->acquireBuffer(item, presentWhen);
+ status_t err = mConsumer->acquireBuffer(item, presentWhen);
if (err != NO_ERROR) {
return err;
}
@@ -247,7 +241,7 @@ status_t ConsumerBase::releaseBufferLocked(
CB_LOGV("releaseBufferLocked: slot=%d/%llu",
slot, mSlots[slot].mFrameNumber);
- status_t err = mBufferQueue->releaseBuffer(slot, mSlots[slot].mFrameNumber,
+ status_t err = mConsumer->releaseBuffer(slot, mSlots[slot].mFrameNumber,
display, eglFence, mSlots[slot].mFence);
if (err == BufferQueue::STALE_BUFFER_SLOT) {
freeBufferLocked(slot);