From 22029508934659a51c6345b6c01da386f6006ec2 Mon Sep 17 00:00:00 2001 From: Jiwen 'Steve' Cai Date: Mon, 12 Feb 2018 22:26:05 -0800 Subject: Support BufferHub-backed IGBP in libgui_test Use gtest's TestWithParam tests to support testing both BufferQueue backend and BufferHub backend. Testing against BufferHub backend is gated by USE_BUFFER_HUB_AS_BUFFER_QUEUE build time flag, so that build targets don't support BufferHub won't be impacted by this test. Known issues: b/36724099: Add support for BufferHubProducer::setAsyncMode(true) b/38137191: Implement BufferHubProducer::detachBuffer b/69981968: Implement BufferHubProducer::attachBuffer b/70041889: BufferHubProducer need to support metadata: numPendingBuffers b/70041952: BufferHubProducer need to support metadata: nextFrameNumber b/73267953: Make BufferHub hornor producer and consumer connection Bug: 68733388 Bug: 70046255 Bug: 73160000 Test: libgui_test Change-Id: I35631762781a622cabb0fba7302d18fb983dde40 --- libs/gui/BufferQueue.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'libs/gui/BufferQueue.cpp') diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp index 41512127f2..198869075d 100644 --- a/libs/gui/BufferQueue.cpp +++ b/libs/gui/BufferQueue.cpp @@ -18,6 +18,8 @@ #define ATRACE_TAG ATRACE_TAG_GRAPHICS //#define LOG_NDEBUG 0 +#include +#include #include #include #include @@ -101,4 +103,31 @@ void BufferQueue::createBufferQueue(sp* outProducer, *outConsumer = consumer; } +void BufferQueue::createBufferHubQueue(sp* outProducer, + sp* outConsumer) { + 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 producer; + sp consumer; + + dvr::ProducerQueueConfigBuilder configBuilder; + std::shared_ptr producerQueue = + dvr::ProducerQueue::Create(configBuilder.SetMetadata().Build(), + dvr::UsagePolicy{}); + LOG_ALWAYS_FATAL_IF(producerQueue == NULL, "BufferQueue: failed to create ProducerQueue."); + + std::shared_ptr consumerQueue = producerQueue->CreateConsumerQueue(); + LOG_ALWAYS_FATAL_IF(consumerQueue == NULL, "BufferQueue: failed to create ConsumerQueue."); + + producer = BufferHubProducer::Create(producerQueue); + consumer = BufferHubConsumer::Create(consumerQueue); + + LOG_ALWAYS_FATAL_IF(producer == NULL, "BufferQueue: failed to create BufferQueueProducer"); + LOG_ALWAYS_FATAL_IF(consumer == NULL, "BufferQueue: failed to create BufferQueueConsumer"); + + *outProducer = producer; + *outConsumer = consumer; +} + }; // namespace android -- cgit v1.2.3-59-g8ed1b