1cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai#include <dvr/dvr_api.h> 22d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai#include <dvr/dvr_buffer_queue.h> 3960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai#include <gui/Surface.h> 42d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai#include <private/dvr/buffer_hub_queue_client.h> 52d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 62d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai#include <base/logging.h> 72d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai#include <gtest/gtest.h> 82d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 92251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include "../dvr_internal.h" 102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 112d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cainamespace android { 122d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cainamespace dvr { 132d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 142d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cainamespace { 152d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 162d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caistatic constexpr int kBufferWidth = 100; 172d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caistatic constexpr int kBufferHeight = 1; 18108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaarstatic constexpr int kLayerCount = 1; 192d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caistatic constexpr int kBufferFormat = HAL_PIXEL_FORMAT_BLOB; 202d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caistatic constexpr int kBufferUsage = GRALLOC_USAGE_SW_READ_RARELY; 212d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caistatic constexpr size_t kQueueCapacity = 3; 222d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 232d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef uint64_t TestMeta; 242d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 252d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caiclass DvrBufferQueueTest : public ::testing::Test { 262d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai protected: 272d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai void SetUp() override { 282251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka write_queue_ = CreateDvrWriteBufferQueueFromProducerQueue( 292251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ProducerQueue::Create<TestMeta>(0, 0, 0, 0)); 302251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_NE(nullptr, write_queue_); 312d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 322d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 332d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai void TearDown() override { 342d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai if (write_queue_ != nullptr) { 352d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrWriteBufferQueueDestroy(write_queue_); 362d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai write_queue_ = nullptr; 372d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 382d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 392d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 402d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai void AllocateBuffers(size_t buffer_count) { 412d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai size_t out_slot; 422d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai for (size_t i = 0; i < buffer_count; i++) { 434d3590f3fd0fd65f4e8758d3228de9f55cf135d0Hendrik Wagenaar int ret = GetProducerQueueFromDvrWriteBufferQueue(write_queue_) 44108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaar ->AllocateBuffer(kBufferWidth, kBufferHeight, kLayerCount, 45108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaar kBufferFormat, kBufferUsage, &out_slot); 462d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 472d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 482d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 492d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 502d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai DvrWriteBufferQueue* write_queue_{nullptr}; 512d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai}; 522d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 532d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' CaiTEST_F(DvrBufferQueueTest, TestWrite_QueueDestroy) { 542d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrWriteBufferQueueDestroy(write_queue_); 552d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai write_queue_ = nullptr; 562d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} 572d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 582d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' CaiTEST_F(DvrBufferQueueTest, TestWrite_QueueGetCapacity) { 592d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai AllocateBuffers(kQueueCapacity); 602d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai size_t capacity = dvrWriteBufferQueueGetCapacity(write_queue_); 612d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 622d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ALOGD_IF(TRACE, "TestWrite_QueueGetCapacity, capacity=%zu", capacity); 632d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(kQueueCapacity, capacity); 642d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} 652d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 662d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' CaiTEST_F(DvrBufferQueueTest, TestCreateReadQueueFromWriteQueue) { 672d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai DvrReadBufferQueue* read_queue = nullptr; 682d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai int ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue); 692d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 702d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 712d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_NE(nullptr, read_queue); 722d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 732d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrReadBufferQueueDestroy(read_queue); 742d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} 752d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 762d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' CaiTEST_F(DvrBufferQueueTest, TestCreateReadQueueFromReadQueue) { 772d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai DvrReadBufferQueue* read_queue1 = nullptr; 782d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai DvrReadBufferQueue* read_queue2 = nullptr; 792d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai int ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue1); 802d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 812d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 822d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_NE(nullptr, read_queue1); 832d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 842d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ret = dvrReadBufferQueueCreateReadQueue(read_queue1, &read_queue2); 852d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 862d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_NE(nullptr, read_queue2); 872d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_NE(read_queue1, read_queue2); 882d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 892d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrReadBufferQueueDestroy(read_queue1); 902d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrReadBufferQueueDestroy(read_queue2); 912d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} 922d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 932251d822dac2a96aad4184a6fdc2690f0a58af7cCorey TabakaTEST_F(DvrBufferQueueTest, CreateEmptyBuffer) { 942251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka AllocateBuffers(3); 952251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 962251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrReadBuffer* read_buffer = nullptr; 972251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrWriteBuffer* write_buffer = nullptr; 982251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 992251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka EXPECT_FALSE(dvrReadBufferIsValid(read_buffer)); 1002251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka EXPECT_FALSE(dvrWriteBufferIsValid(write_buffer)); 1012251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka dvrReadBufferCreateEmpty(&read_buffer); 1032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_NE(nullptr, read_buffer); 1042251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1052251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka dvrWriteBufferCreateEmpty(&write_buffer); 1062251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_NE(nullptr, write_buffer); 1072251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1082251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka EXPECT_FALSE(dvrReadBufferIsValid(read_buffer)); 1092251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka EXPECT_FALSE(dvrWriteBufferIsValid(write_buffer)); 1102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1112251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrReadBufferQueue* read_queue = nullptr; 1122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1132251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_EQ(0, dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue)); 1142251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1152251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka const int kTimeoutMs = 0; 1162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka int fence_fd = -1; 1172251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_EQ(0, dvrWriteBufferQueueDequeue(write_queue_, kTimeoutMs, 1182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka write_buffer, &fence_fd)); 1192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka EXPECT_EQ(-1, fence_fd); 1202251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka EXPECT_TRUE(dvrWriteBufferIsValid(write_buffer)); 1212251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_EQ(0, dvrWriteBufferClear(write_buffer)); 1232251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka EXPECT_FALSE(dvrWriteBufferIsValid(write_buffer)); 1242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1262d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' CaiTEST_F(DvrBufferQueueTest, TestDequeuePostDequeueRelease) { 1272d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai static constexpr int kTimeout = 0; 1282d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai DvrReadBufferQueue* read_queue = nullptr; 1292d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai DvrReadBuffer* rb = nullptr; 1302d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai DvrWriteBuffer* wb = nullptr; 1312d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai int fence_fd = -1; 1322d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1332d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai int ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue); 1342d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1352d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 1362d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_NE(nullptr, read_queue); 1372d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka dvrWriteBufferCreateEmpty(&wb); 1392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_NE(nullptr, wb); 1402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1412251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka dvrReadBufferCreateEmpty(&rb); 1422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_NE(nullptr, rb); 1432251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1442d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai AllocateBuffers(kQueueCapacity); 1452d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1462d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai // Gain buffer for writing. 1472251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ret = dvrWriteBufferQueueDequeue(write_queue_, kTimeout, wb, &fence_fd); 1482d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 1492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_TRUE(dvrWriteBufferIsValid(wb)); 1502d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ALOGD_IF(TRACE, "TestDequeuePostDequeueRelease, gain buffer %p, fence_fd=%d", 1512d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai wb, fence_fd); 1522d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai pdx::LocalHandle release_fence(fence_fd); 1532d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1542d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai // Post buffer to the read_queue. 1552d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai TestMeta seq = 42U; 1562d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ret = dvrWriteBufferPost(wb, /* fence */ -1, &seq, sizeof(seq)); 1572d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 1582d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrWriteBufferDestroy(wb); 1592d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai wb = nullptr; 1602d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1612d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai // Acquire buffer for reading. 1622d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai TestMeta acquired_seq = 0U; 1632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ret = dvrReadBufferQueueDequeue(read_queue, kTimeout, rb, &fence_fd, 1642d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai &acquired_seq, sizeof(acquired_seq)); 1652d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 1662251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_TRUE(dvrReadBufferIsValid(rb)); 1672d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(seq, acquired_seq); 1682d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ALOGD_IF(TRACE, 1692d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai "TestDequeuePostDequeueRelease, acquire buffer %p, fence_fd=%d", rb, 1702d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai fence_fd); 1712d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai pdx::LocalHandle acquire_fence(fence_fd); 1722d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1732d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai // Release buffer to the write_queue. 1742d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ret = dvrReadBufferRelease(rb, -1); 1752d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(0, ret); 1762d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrReadBufferDestroy(rb); 1772d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai rb = nullptr; 1782d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1792d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai // TODO(b/34387835) Currently buffer allocation has to happen after all queues 1802d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai // are initialized. 1812d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai size_t capacity = dvrReadBufferQueueGetCapacity(read_queue); 1822d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1832d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ALOGD_IF(TRACE, "TestDequeuePostDequeueRelease, capacity=%zu", capacity); 1842d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai ASSERT_EQ(kQueueCapacity, capacity); 1852d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1862d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai dvrReadBufferQueueDestroy(read_queue); 1872d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} 1882d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 189960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' CaiTEST_F(DvrBufferQueueTest, TestGetExternalSurface) { 190960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai ANativeWindow* window = nullptr; 191cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai 192cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai // The |write_queue_| doesn't have proper metadata (must be 193cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai // DvrNativeBufferMetadata) configured during creation. 194960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai int ret = dvrWriteBufferQueueGetExternalSurface(write_queue_, &window); 195cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai ASSERT_EQ(-EINVAL, ret); 196cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai ASSERT_EQ(nullptr, window); 197cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai 198cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai // A write queue with DvrNativeBufferMetadata should work fine. 199cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai std::unique_ptr<DvrWriteBufferQueue, decltype(&dvrWriteBufferQueueDestroy)> 2002251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka write_queue( 2012251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka CreateDvrWriteBufferQueueFromProducerQueue( 2022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ProducerQueue::Create<DvrNativeBufferMetadata>(0, 0, 0, 0)), 2032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka dvrWriteBufferQueueDestroy); 2042251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ASSERT_NE(nullptr, write_queue.get()); 205960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai 206cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai ret = dvrWriteBufferQueueGetExternalSurface(write_queue.get(), &window); 207960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai ASSERT_EQ(0, ret); 208960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai ASSERT_NE(nullptr, window); 209960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai 210960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai sp<Surface> surface = static_cast<Surface*>(window); 211960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai ASSERT_TRUE(Surface::isValid(surface)); 212960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai} 213960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai 2142d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} // namespace 2152d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 2162d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} // namespace dvr 2172d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai} // namespace android 218