From dd26416fe135f93ef2c8570738f8e1ca5e2ca3a3 Mon Sep 17 00:00:00 2001 From: Dan Stoza Date: Thu, 12 Mar 2015 13:58:47 -0700 Subject: [PATCH] libgui: Prepare for IGBC::BufferItem removal Switches some dependencies from IGraphicBufferConsumer::BufferItem to android::BufferItem and adds some methods to facilitate incrementally changing client code to do the same. Change-Id: I699ed0a6837076867ca756b28d1ffb2238f7a0d9 --- include/gui/BufferItemConsumer.h | 6 ++++-- include/gui/ConsumerBase.h | 4 ++-- include/gui/GLConsumer.h | 4 ++-- libs/gui/BufferItemConsumer.cpp | 14 +++++++++++++- libs/gui/ConsumerBase.cpp | 14 +++++++++++++- libs/gui/CpuConsumer.cpp | 3 ++- libs/gui/GLConsumer.cpp | 16 ++++++++++++++-- libs/gui/StreamSplitter.cpp | 3 ++- libs/gui/tests/BufferQueue_test.cpp | 11 ++++++----- libs/gui/tests/StreamSplitter_test.cpp | 5 +++-- 10 files changed, 61 insertions(+), 19 deletions(-) diff --git a/include/gui/BufferItemConsumer.h b/include/gui/BufferItemConsumer.h index 45f329e72..57e121e61 100644 --- a/include/gui/BufferItemConsumer.h +++ b/include/gui/BufferItemConsumer.h @@ -76,8 +76,10 @@ class BufferItemConsumer: public ConsumerBase // // If waitForFence is true, and the acquired BufferItem has a valid fence object, // acquireBuffer will wait on the fence with no timeout before returning. - status_t acquireBuffer(BufferItem *item, nsecs_t presentWhen, - bool waitForFence = true); + status_t acquireBuffer(BufferQueue::BufferItem *item, nsecs_t presentWhen, + bool waitForFence = true); + status_t acquireBuffer(android::BufferItem* item, nsecs_t presentWhen, + bool waitForFence = true); // Returns an acquired buffer to the queue, allowing it to be reused. Since // only a fixed number of buffers may be acquired at a time, old buffers diff --git a/include/gui/ConsumerBase.h b/include/gui/ConsumerBase.h index f7ab5ac59..46ad20e7b 100644 --- a/include/gui/ConsumerBase.h +++ b/include/gui/ConsumerBase.h @@ -153,8 +153,8 @@ protected: // initialization that must take place the first time a buffer is assigned // to a slot. If it is overridden the derived class's implementation must // call ConsumerBase::acquireBufferLocked. - virtual status_t acquireBufferLocked(IGraphicBufferConsumer::BufferItem *item, - nsecs_t presentWhen); + virtual status_t acquireBufferLocked(BufferItem *item, nsecs_t presentWhen); + virtual status_t acquireBufferLocked(BufferQueue::BufferItem *item, nsecs_t presentWhen); // releaseBufferLocked relinquishes control over a buffer, returning that // control to the BufferQueue. diff --git a/include/gui/GLConsumer.h b/include/gui/GLConsumer.h index bf9eb2461..167ef2057 100644 --- a/include/gui/GLConsumer.h +++ b/include/gui/GLConsumer.h @@ -241,8 +241,8 @@ protected: // acquireBufferLocked overrides the ConsumerBase method to update the // mEglSlots array in addition to the ConsumerBase behavior. - virtual status_t acquireBufferLocked(BufferQueue::BufferItem *item, - nsecs_t presentWhen); + virtual status_t acquireBufferLocked(BufferItem *item, nsecs_t presentWhen); + virtual status_t acquireBufferLocked(IGraphicBufferConsumer::BufferItem *item, nsecs_t presentWhen); // releaseBufferLocked overrides the ConsumerBase method to update the // mEglSlots array in addition to the ConsumerBase. diff --git a/libs/gui/BufferItemConsumer.cpp b/libs/gui/BufferItemConsumer.cpp index 655bfe6e8..fb978ddf0 100644 --- a/libs/gui/BufferItemConsumer.cpp +++ b/libs/gui/BufferItemConsumer.cpp @@ -19,6 +19,7 @@ //#define ATRACE_TAG ATRACE_TAG_GRAPHICS #include +#include #include //#define BI_LOGV(x, ...) ALOGV("[%s] " x, mName.string(), ##__VA_ARGS__) @@ -52,7 +53,7 @@ void BufferItemConsumer::setName(const String8& name) { mConsumer->setConsumerName(name); } -status_t BufferItemConsumer::acquireBuffer(BufferItem *item, +status_t BufferItemConsumer::acquireBuffer(BufferQueue::BufferItem *item, nsecs_t presentWhen, bool waitForFence) { status_t err; @@ -82,6 +83,17 @@ status_t BufferItemConsumer::acquireBuffer(BufferItem *item, return OK; } +status_t BufferItemConsumer::acquireBuffer(android::BufferItem* outItem, + nsecs_t presentWhen, bool waitForFence) { + BufferQueue::BufferItem item; + status_t result = acquireBuffer(&item, presentWhen, waitForFence); + if (result != NO_ERROR) { + return result; + } + *outItem = item; + return NO_ERROR; +} + status_t BufferItemConsumer::releaseBuffer(const BufferItem &item, const sp& releaseFence) { status_t err; diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp index 5fc83eebf..c8b5d0cb9 100644 --- a/libs/gui/ConsumerBase.cpp +++ b/libs/gui/ConsumerBase.cpp @@ -27,6 +27,7 @@ #include +#include #include #include #include @@ -179,7 +180,7 @@ void ConsumerBase::dumpLocked(String8& result, const char* prefix) const { } } -status_t ConsumerBase::acquireBufferLocked(BufferQueue::BufferItem *item, +status_t ConsumerBase::acquireBufferLocked(BufferItem *item, nsecs_t presentWhen) { status_t err = mConsumer->acquireBuffer(item, presentWhen); if (err != NO_ERROR) { @@ -199,6 +200,17 @@ status_t ConsumerBase::acquireBufferLocked(BufferQueue::BufferItem *item, return OK; } +status_t ConsumerBase::acquireBufferLocked(BufferQueue::BufferItem *outItem, + nsecs_t presentWhen) { + BufferItem item; + status_t result = acquireBufferLocked(&item, presentWhen); + if (result != NO_ERROR) { + return result; + } + *outItem = item; + return NO_ERROR; +} + status_t ConsumerBase::addReleaseFence(int slot, const sp graphicBuffer, const sp& fence) { Mutex::Autolock lock(mMutex); diff --git a/libs/gui/CpuConsumer.cpp b/libs/gui/CpuConsumer.cpp index a7ca05559..eb39469b0 100644 --- a/libs/gui/CpuConsumer.cpp +++ b/libs/gui/CpuConsumer.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #define CC_LOGV(x, ...) ALOGV("[%s] " x, mName.string(), ##__VA_ARGS__) @@ -110,7 +111,7 @@ status_t CpuConsumer::lockNextBuffer(LockedBuffer *nativeBuffer) { return NOT_ENOUGH_DATA; } - BufferQueue::BufferItem b; + BufferItem b; Mutex::Autolock _l(mMutex); diff --git a/libs/gui/GLConsumer.cpp b/libs/gui/GLConsumer.cpp index 21bb4c482..d256ae538 100644 --- a/libs/gui/GLConsumer.cpp +++ b/libs/gui/GLConsumer.cpp @@ -29,6 +29,7 @@ #include +#include #include #include #include @@ -210,7 +211,7 @@ status_t GLConsumer::updateTexImage() { return err; } - BufferQueue::BufferItem item; + BufferItem item; // Acquire the next buffer. // In asynchronous mode the list is guaranteed to be one buffer @@ -342,7 +343,7 @@ sp GLConsumer::getDebugTexImageBuffer() { return sReleasedTexImageBuffer; } -status_t GLConsumer::acquireBufferLocked(BufferQueue::BufferItem *item, +status_t GLConsumer::acquireBufferLocked(BufferItem *item, nsecs_t presentWhen) { status_t err = ConsumerBase::acquireBufferLocked(item, presentWhen); if (err != NO_ERROR) { @@ -360,6 +361,17 @@ status_t GLConsumer::acquireBufferLocked(BufferQueue::BufferItem *item, return NO_ERROR; } +status_t GLConsumer::acquireBufferLocked(BufferQueue::BufferItem *outItem, + nsecs_t presentWhen) { + BufferItem item; + status_t result = acquireBufferLocked(&item, presentWhen); + if (result != NO_ERROR) { + return result; + } + *outItem = item; + return NO_ERROR; +} + status_t GLConsumer::releaseBufferLocked(int buf, sp graphicBuffer, EGLDisplay display, EGLSyncKHR eglFence) { diff --git a/libs/gui/StreamSplitter.cpp b/libs/gui/StreamSplitter.cpp index 14613373f..43f9214fc 100644 --- a/libs/gui/StreamSplitter.cpp +++ b/libs/gui/StreamSplitter.cpp @@ -20,6 +20,7 @@ #define ATRACE_TAG ATRACE_TAG_GRAPHICS //#define LOG_NDEBUG 0 +#include #include #include #include @@ -123,7 +124,7 @@ void StreamSplitter::onFrameAvailable(const BufferItem& /* item */) { ++mOutstandingBuffers; // Acquire and detach the buffer from the input - IGraphicBufferConsumer::BufferItem bufferItem; + BufferItem bufferItem; status_t status = mInput->acquireBuffer(&bufferItem, /* presentWhen */ 0); LOG_ALWAYS_FATAL_IF(status != NO_ERROR, "acquiring buffer from input failed (%d)", status); diff --git a/libs/gui/tests/BufferQueue_test.cpp b/libs/gui/tests/BufferQueue_test.cpp index 80119de28..c38c79781 100644 --- a/libs/gui/tests/BufferQueue_test.cpp +++ b/libs/gui/tests/BufferQueue_test.cpp @@ -17,6 +17,7 @@ #define LOG_TAG "BufferQueue_test" //#define LOG_NDEBUG 0 +#include #include #include @@ -129,7 +130,7 @@ TEST_F(BufferQueueTest, BufferQueueInAnotherProcess) { NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, false, Fence::NO_FENCE); ASSERT_EQ(OK, mProducer->queueBuffer(slot, input, &output)); - IGraphicBufferConsumer::BufferItem item; + BufferItem item; ASSERT_EQ(OK, mConsumer->acquireBuffer(&item, 0)); uint32_t* dataOut; @@ -154,7 +155,7 @@ TEST_F(BufferQueueTest, AcquireBuffer_ExceedsMaxAcquireCount_Fails) { IGraphicBufferProducer::QueueBufferInput qbi(0, false, HAL_DATASPACE_UNKNOWN, Rect(0, 0, 1, 1), NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, false, Fence::NO_FENCE); - BufferQueue::BufferItem item; + BufferItem item; for (int i = 0; i < 2; i++) { ASSERT_EQ(IGraphicBufferProducer::BUFFER_NEEDS_REALLOCATION, @@ -251,7 +252,7 @@ TEST_F(BufferQueueTest, DetachAndReattachOnProducerSide) { NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, false, Fence::NO_FENCE); ASSERT_EQ(OK, mProducer->queueBuffer(newSlot, input, &output)); - IGraphicBufferConsumer::BufferItem item; + BufferItem item; ASSERT_EQ(OK, mConsumer->acquireBuffer(&item, static_cast(0))); uint32_t* dataOut; @@ -286,7 +287,7 @@ TEST_F(BufferQueueTest, DetachAndReattachOnConsumerSide) { BufferQueueDefs::NUM_BUFFER_SLOTS)); // Index too high ASSERT_EQ(BAD_VALUE, mConsumer->detachBuffer(0)); // Not acquired - IGraphicBufferConsumer::BufferItem item; + BufferItem item; ASSERT_EQ(OK, mConsumer->acquireBuffer(&item, static_cast(0))); ASSERT_EQ(OK, mConsumer->detachBuffer(item.mBuf)); @@ -347,7 +348,7 @@ TEST_F(BufferQueueTest, MoveFromConsumerToProducer) { NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, false, Fence::NO_FENCE); ASSERT_EQ(OK, mProducer->queueBuffer(slot, input, &output)); - IGraphicBufferConsumer::BufferItem item; + BufferItem item; ASSERT_EQ(OK, mConsumer->acquireBuffer(&item, static_cast(0))); ASSERT_EQ(OK, mConsumer->detachBuffer(item.mBuf)); diff --git a/libs/gui/tests/StreamSplitter_test.cpp b/libs/gui/tests/StreamSplitter_test.cpp index 429ab6cf6..767c7c6e4 100644 --- a/libs/gui/tests/StreamSplitter_test.cpp +++ b/libs/gui/tests/StreamSplitter_test.cpp @@ -17,6 +17,7 @@ #define LOG_TAG "StreamSplitter_test" //#define LOG_NDEBUG 0 +#include #include #include #include @@ -116,7 +117,7 @@ TEST_F(StreamSplitterTest, OneInputOneOutput) { Fence::NO_FENCE); ASSERT_EQ(OK, inputProducer->queueBuffer(slot, qbInput, &qbOutput)); - IGraphicBufferConsumer::BufferItem item; + BufferItem item; ASSERT_EQ(OK, outputConsumer->acquireBuffer(&item, 0)); uint32_t* dataOut; @@ -184,7 +185,7 @@ TEST_F(StreamSplitterTest, OneInputMultipleOutputs) { ASSERT_EQ(OK, inputProducer->queueBuffer(slot, qbInput, &qbOutput)); for (int output = 0; output < NUM_OUTPUTS; ++output) { - IGraphicBufferConsumer::BufferItem item; + BufferItem item; ASSERT_EQ(OK, outputConsumers[output]->acquireBuffer(&item, 0)); uint32_t* dataOut;