summaryrefslogtreecommitdiff
path: root/libs/gui/BufferQueue.cpp
diff options
context:
space:
mode:
author Jiwen 'Steve' Cai <jwcai@google.com> 2018-02-12 22:26:05 -0800
committer Jiwen 'Steve' Cai <jwcai@google.com> 2018-02-13 15:16:38 -0800
commit22029508934659a51c6345b6c01da386f6006ec2 (patch)
tree6f14acdcaa4c74b0857825221ba16b6c85ef2eca /libs/gui/BufferQueue.cpp
parenta2a27b2679bcfd204090a89234e9751eafe23231 (diff)
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
Diffstat (limited to 'libs/gui/BufferQueue.cpp')
-rw-r--r--libs/gui/BufferQueue.cpp29
1 files changed, 29 insertions, 0 deletions
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 <gui/BufferHubConsumer.h>
+#include <gui/BufferHubProducer.h>
#include <gui/BufferQueue.h>
#include <gui/BufferQueueConsumer.h>
#include <gui/BufferQueueCore.h>
@@ -101,4 +103,31 @@ void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
*outConsumer = consumer;
}
+void BufferQueue::createBufferHubQueue(sp<IGraphicBufferProducer>* outProducer,
+ sp<IGraphicBufferConsumer>* 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<IGraphicBufferProducer> producer;
+ sp<IGraphicBufferConsumer> consumer;
+
+ dvr::ProducerQueueConfigBuilder configBuilder;
+ std::shared_ptr<dvr::ProducerQueue> producerQueue =
+ dvr::ProducerQueue::Create(configBuilder.SetMetadata<DvrNativeBufferMetadata>().Build(),
+ dvr::UsagePolicy{});
+ LOG_ALWAYS_FATAL_IF(producerQueue == NULL, "BufferQueue: failed to create ProducerQueue.");
+
+ std::shared_ptr<dvr::ConsumerQueue> 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