diff options
author | 2016-01-06 14:21:52 -0800 | |
---|---|---|
committer | 2016-01-06 14:21:52 -0800 | |
commit | 3bb0c8810fb461a64f04bce81f32ca1994fde9b5 (patch) | |
tree | 947a0ae7bb235772c5cb0f9b86e48221b3dac289 | |
parent | 927d64c2c023ffa036c545b85cd706a54fa89499 (diff) |
libgui: Remove custom allocator from tests
The StreamSplitter test used a custom allocator to ensure that only one
GraphicBuffer was ever allocated during the test run. Now we can ensure
that by disabling allocation on the relevant BufferQueues after
allocating that one buffer, so the custom allocator is unnecessary.
Change-Id: I98289bda669c50a93ba9b70ceca1781203ad83b2
-rw-r--r-- | libs/gui/tests/StreamSplitter_test.cpp | 57 |
1 files changed, 22 insertions, 35 deletions
diff --git a/libs/gui/tests/StreamSplitter_test.cpp b/libs/gui/tests/StreamSplitter_test.cpp index c7ce263e5a..498492e179 100644 --- a/libs/gui/tests/StreamSplitter_test.cpp +++ b/libs/gui/tests/StreamSplitter_test.cpp @@ -52,42 +52,16 @@ struct DummyListener : public BnConsumerListener { virtual void onSidebandStreamChanged() {} }; -class CountedAllocator : public BnGraphicBufferAlloc { -public: - CountedAllocator() : mAllocCount(0) { - sp<ISurfaceComposer> composer(ComposerService::getComposerService()); - mAllocator = composer->createGraphicBufferAlloc(); - } - - virtual ~CountedAllocator() {} - - virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h, - PixelFormat format, uint32_t usage, status_t* error) { - ++mAllocCount; - sp<GraphicBuffer> buffer = mAllocator->createGraphicBuffer(w, h, format, - usage, error); - return buffer; - } - - int getAllocCount() const { return mAllocCount; } - -private: - sp<IGraphicBufferAlloc> mAllocator; - int mAllocCount; -}; - static const uint32_t TEST_DATA = 0x12345678u; TEST_F(StreamSplitterTest, OneInputOneOutput) { - sp<CountedAllocator> allocator(new CountedAllocator); - sp<IGraphicBufferProducer> inputProducer; sp<IGraphicBufferConsumer> inputConsumer; - BufferQueue::createBufferQueue(&inputProducer, &inputConsumer, allocator); + BufferQueue::createBufferQueue(&inputProducer, &inputConsumer); sp<IGraphicBufferProducer> outputProducer; sp<IGraphicBufferConsumer> outputConsumer; - BufferQueue::createBufferQueue(&outputProducer, &outputConsumer, allocator); + BufferQueue::createBufferQueue(&outputProducer, &outputConsumer); ASSERT_EQ(OK, outputConsumer->consumerConnect(new DummyListener, false)); sp<StreamSplitter> splitter; @@ -95,6 +69,9 @@ TEST_F(StreamSplitterTest, OneInputOneOutput) { ASSERT_EQ(OK, status); ASSERT_EQ(OK, splitter->addOutput(outputProducer)); + // Never allow the output BufferQueue to allocate a buffer + ASSERT_EQ(OK, outputProducer->allowAllocation(false)); + IGraphicBufferProducer::QueueBufferOutput qbOutput; ASSERT_EQ(OK, inputProducer->connect(new DummyProducerListener, NATIVE_WINDOW_API_CPU, false, &qbOutput)); @@ -118,6 +95,10 @@ TEST_F(StreamSplitterTest, OneInputOneOutput) { NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, Fence::NO_FENCE); ASSERT_EQ(OK, inputProducer->queueBuffer(slot, qbInput, &qbOutput)); + // Now that we have dequeued/allocated one buffer, prevent any further + // allocations + ASSERT_EQ(OK, inputProducer->allowAllocation(false)); + BufferItem item; ASSERT_EQ(OK, outputConsumer->acquireBuffer(&item, 0)); @@ -130,26 +111,25 @@ TEST_F(StreamSplitterTest, OneInputOneOutput) { ASSERT_EQ(OK, outputConsumer->releaseBuffer(item.mSlot, item.mFrameNumber, EGL_NO_DISPLAY, EGL_NO_SYNC_KHR, Fence::NO_FENCE)); + // This should succeed even with allocation disabled since it will have + // received the buffer back from the output BufferQueue ASSERT_EQ(IGraphicBufferProducer::BUFFER_NEEDS_REALLOCATION, inputProducer->dequeueBuffer(&slot, &fence, 0, 0, 0, GRALLOC_USAGE_SW_WRITE_OFTEN)); - - ASSERT_EQ(1, allocator->getAllocCount()); } TEST_F(StreamSplitterTest, OneInputMultipleOutputs) { const int NUM_OUTPUTS = 4; - sp<CountedAllocator> allocator(new CountedAllocator); sp<IGraphicBufferProducer> inputProducer; sp<IGraphicBufferConsumer> inputConsumer; - BufferQueue::createBufferQueue(&inputProducer, &inputConsumer, allocator); + BufferQueue::createBufferQueue(&inputProducer, &inputConsumer); sp<IGraphicBufferProducer> outputProducers[NUM_OUTPUTS] = {}; sp<IGraphicBufferConsumer> outputConsumers[NUM_OUTPUTS] = {}; for (int output = 0; output < NUM_OUTPUTS; ++output) { BufferQueue::createBufferQueue(&outputProducers[output], - &outputConsumers[output], allocator); + &outputConsumers[output]); ASSERT_EQ(OK, outputConsumers[output]->consumerConnect( new DummyListener, false)); } @@ -159,6 +139,9 @@ TEST_F(StreamSplitterTest, OneInputMultipleOutputs) { ASSERT_EQ(OK, status); for (int output = 0; output < NUM_OUTPUTS; ++output) { ASSERT_EQ(OK, splitter->addOutput(outputProducers[output])); + + // Never allow the output BufferQueues to allocate a buffer + ASSERT_EQ(OK, outputProducers[output]->allowAllocation(false)); } IGraphicBufferProducer::QueueBufferOutput qbOutput; @@ -184,6 +167,10 @@ TEST_F(StreamSplitterTest, OneInputMultipleOutputs) { NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, Fence::NO_FENCE); ASSERT_EQ(OK, inputProducer->queueBuffer(slot, qbInput, &qbOutput)); + // Now that we have dequeued/allocated one buffer, prevent any further + // allocations + ASSERT_EQ(OK, inputProducer->allowAllocation(false)); + for (int output = 0; output < NUM_OUTPUTS; ++output) { BufferItem item; ASSERT_EQ(OK, outputConsumers[output]->acquireBuffer(&item, 0)); @@ -199,11 +186,11 @@ TEST_F(StreamSplitterTest, OneInputMultipleOutputs) { Fence::NO_FENCE)); } + // This should succeed even with allocation disabled since it will have + // received the buffer back from the output BufferQueues ASSERT_EQ(IGraphicBufferProducer::BUFFER_NEEDS_REALLOCATION, inputProducer->dequeueBuffer(&slot, &fence, 0, 0, 0, GRALLOC_USAGE_SW_WRITE_OFTEN)); - - ASSERT_EQ(1, allocator->getAllocCount()); } TEST_F(StreamSplitterTest, OutputAbandonment) { |