From b3d0bdf0dbc19f0a0d7d924693025371e24828fd Mon Sep 17 00:00:00 2001 From: Dan Stoza Date: Mon, 7 Apr 2014 16:33:59 -0700 Subject: [PATCH] BufferQueue: Remove Bn version of create* It turns out that there's no reason to have both I* and Bn* versions of the createBufferQueue method, so I removed the Bn* version. Change-Id: I66aeb09e10458ae540ddf1f38d2d0154ea8f315b --- include/gui/BufferQueue.h | 4 --- libs/gui/BufferQueue.cpp | 28 +++++++++---------- libs/gui/tests/BufferQueue_test.cpp | 8 +++--- services/surfaceflinger/Layer.cpp | 4 +-- services/surfaceflinger/MonitoredProducer.cpp | 9 ++++-- services/surfaceflinger/MonitoredProducer.h | 7 +++-- 6 files changed, 29 insertions(+), 31 deletions(-) diff --git a/include/gui/BufferQueue.h b/include/gui/BufferQueue.h index f74dc2624..99147cd4f 100644 --- a/include/gui/BufferQueue.h +++ b/include/gui/BufferQueue.h @@ -112,10 +112,6 @@ public: // needed gralloc buffers. BufferQueue(const sp& allocator = NULL); - static void createBufferQueue(sp* outProducer, - sp* outConsumer, - const sp& allocator = NULL); - static void createBufferQueue(sp* outProducer, sp* outConsumer, const sp& allocator = NULL); diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp index c306f9d65..782afcc9c 100644 --- a/libs/gui/BufferQueue.cpp +++ b/libs/gui/BufferQueue.cpp @@ -43,19 +43,6 @@ void BufferQueue::ProxyConsumerListener::onBuffersReleased() { } } -void BufferQueue::createBufferQueue(sp* outProducer, - sp* outConsumer, - const sp& allocator) { - LOG_ALWAYS_FATAL_IF(outProducer == NULL, - "BufferQueue: outProducer must not be NULL"); - LOG_ALWAYS_FATAL_IF(outConsumer == NULL, - "BufferQueue: outConsumer must not be NULL"); - - sp core(new BufferQueueCore(allocator)); - *outProducer = new BufferQueueProducer(core); - *outConsumer = new BufferQueueConsumer(core); -} - void BufferQueue::createBufferQueue(sp* outProducer, sp* outConsumer, const sp& allocator) { @@ -65,8 +52,19 @@ void BufferQueue::createBufferQueue(sp* outProducer, "BufferQueue: outConsumer must not be NULL"); sp core(new BufferQueueCore(allocator)); - *outProducer = new BufferQueueProducer(core); - *outConsumer = new BufferQueueConsumer(core); + LOG_ALWAYS_FATAL_IF(core == NULL, + "BufferQueue: failed to create BufferQueueCore"); + + sp producer(new BufferQueueProducer(core)); + LOG_ALWAYS_FATAL_IF(producer == NULL, + "BufferQueue: failed to create BufferQueueProducer"); + + sp consumer(new BufferQueueConsumer(core)); + LOG_ALWAYS_FATAL_IF(consumer == NULL, + "BufferQueue: failed to create BufferQueueConsumer"); + + *outProducer = producer; + *outConsumer = consumer; } BufferQueue::BufferQueue(const sp& allocator) : diff --git a/libs/gui/tests/BufferQueue_test.cpp b/libs/gui/tests/BufferQueue_test.cpp index 7943476a6..e02c7808f 100644 --- a/libs/gui/tests/BufferQueue_test.cpp +++ b/libs/gui/tests/BufferQueue_test.cpp @@ -81,12 +81,12 @@ TEST_F(BufferQueueTest, BufferQueueInAnotherProcess) { if (forkPid == 0) { // Child process - sp producer; - sp consumer; + sp producer; + sp consumer; BufferQueue::createBufferQueue(&producer, &consumer); sp serviceManager = defaultServiceManager(); - serviceManager->addService(PRODUCER_NAME, producer.get()); - serviceManager->addService(CONSUMER_NAME, consumer.get()); + serviceManager->addService(PRODUCER_NAME, producer->asBinder()); + serviceManager->addService(CONSUMER_NAME, consumer->asBinder()); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); LOG_ALWAYS_FATAL("Shouldn't be here"); diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 7f2ee2a80..58a304002 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -117,8 +117,8 @@ Layer::Layer(SurfaceFlinger* flinger, const sp& client, void Layer::onFirstRef() { // Creates a custom BufferQueue for SurfaceFlingerConsumer to use - sp producer; - sp consumer; + sp producer; + sp consumer; BufferQueue::createBufferQueue(&producer, &consumer); mProducer = new MonitoredProducer(producer, mFlinger); mSurfaceFlingerConsumer = new SurfaceFlingerConsumer(consumer, mTextureName); diff --git a/services/surfaceflinger/MonitoredProducer.cpp b/services/surfaceflinger/MonitoredProducer.cpp index 8fed676ac..cd3fdf1db 100644 --- a/services/surfaceflinger/MonitoredProducer.cpp +++ b/services/surfaceflinger/MonitoredProducer.cpp @@ -20,7 +20,7 @@ namespace android { -MonitoredProducer::MonitoredProducer(const sp& producer, +MonitoredProducer::MonitoredProducer(const sp& producer, const sp& flinger) : mProducer(producer), mFlinger(flinger) {} @@ -49,8 +49,7 @@ MonitoredProducer::~MonitoredProducer() { wp mProducer; }; - mFlinger->postMessageAsync(new MessageCleanUpList(mFlinger, - static_cast(this))); + mFlinger->postMessageAsync(new MessageCleanUpList(mFlinger, asBinder())); } status_t MonitoredProducer::requestBuffer(int slot, sp* buf) { @@ -101,5 +100,9 @@ status_t MonitoredProducer::setSidebandStream(const sp& stream) { return mProducer->setSidebandStream(stream); } +IBinder* MonitoredProducer::onAsBinder() { + return mProducer->asBinder().get(); +} + // --------------------------------------------------------------------------- }; // namespace android diff --git a/services/surfaceflinger/MonitoredProducer.h b/services/surfaceflinger/MonitoredProducer.h index f78be2001..7ac6f068f 100644 --- a/services/surfaceflinger/MonitoredProducer.h +++ b/services/surfaceflinger/MonitoredProducer.h @@ -27,9 +27,9 @@ class SurfaceFlinger; // MonitoredProducer wraps an IGraphicBufferProducer so that SurfaceFlinger will // be notified upon its destruction -class MonitoredProducer : public BnGraphicBufferProducer { +class MonitoredProducer : public IGraphicBufferProducer { public: - MonitoredProducer(const sp& producer, + MonitoredProducer(const sp& producer, const sp& flinger); virtual ~MonitoredProducer(); @@ -49,9 +49,10 @@ public: bool producerControlledByApp, QueueBufferOutput* output); virtual status_t disconnect(int api); virtual status_t setSidebandStream(const sp& stream); + virtual IBinder* onAsBinder(); private: - sp mProducer; + sp mProducer; sp mFlinger; };