From 63ce11bb090d2eee5a3d80018bf4e7460f6c2679 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Thu, 30 Jul 2020 17:12:05 +0900 Subject: [PATCH] DSBuffer: add canAquireBuffer method in DSBufferQueue Change-Id: Ic7aab2ea2843725a5d85c6a30c257294069f8b67 --- src/DSBuffer/DSBufferQueueTBMImpl.cpp | 10 ++++++++++ src/DSBuffer/DSBufferQueueTBMImpl.h | 2 ++ src/DSBuffer/IDSBufferQueue.h | 2 ++ tests/DSBufferTBMImpl-test.cpp | 13 ++++++++++++- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/DSBuffer/DSBufferQueueTBMImpl.cpp b/src/DSBuffer/DSBufferQueueTBMImpl.cpp index 08eb77e..c73e199 100644 --- a/src/DSBuffer/DSBufferQueueTBMImpl.cpp +++ b/src/DSBuffer/DSBufferQueueTBMImpl.cpp @@ -124,4 +124,14 @@ bool DSBufferQueueTBMImpl::releaseBuffer(std::shared_ptr buffer) return true; } +bool DSBufferQueueTBMImpl::canAcquireBuffer(bool wait) +{ + if (!tbm_surface_queue_can_acquire(__tqueue, wait)) { + DSLOG_ERR("BuffeQueueTBM", "tbm_surface_queue_can_acquire fails."); + return false; + } + + return true; +} + } diff --git a/src/DSBuffer/DSBufferQueueTBMImpl.h b/src/DSBuffer/DSBufferQueueTBMImpl.h index a4e06e3..f5919b3 100644 --- a/src/DSBuffer/DSBufferQueueTBMImpl.h +++ b/src/DSBuffer/DSBufferQueueTBMImpl.h @@ -24,6 +24,8 @@ public: std::shared_ptr acquireBuffer() override; bool releaseBuffer(std::shared_ptr buffer) override; + bool canAcquireBuffer(bool wait) override; + private: int __slotSize; int __bufferWidth; diff --git a/src/DSBuffer/IDSBufferQueue.h b/src/DSBuffer/IDSBufferQueue.h index a3e719d..4750374 100644 --- a/src/DSBuffer/IDSBufferQueue.h +++ b/src/DSBuffer/IDSBufferQueue.h @@ -19,6 +19,8 @@ public: virtual bool enqueueBuffer(std::shared_ptr ) = 0; virtual std::shared_ptr acquireBuffer() = 0; virtual bool releaseBuffer(std::shared_ptr ) = 0; + + virtual bool canAcquireBuffer(bool wait) = 0; }; } diff --git a/tests/DSBufferTBMImpl-test.cpp b/tests/DSBufferTBMImpl-test.cpp index f2758e8..6a96113 100644 --- a/tests/DSBufferTBMImpl-test.cpp +++ b/tests/DSBufferTBMImpl-test.cpp @@ -103,4 +103,15 @@ TEST_F(DSBufferTBMImplTest, DequeueBuffer_4Times) EXPECT_TRUE(bufferQueue->releaseBuffer(buffer4)); EXPECT_TRUE(bufferQueue->releaseBuffer(buffer5)); EXPECT_TRUE(bufferQueue->releaseBuffer(buffer6)); -} \ No newline at end of file +} + +TEST_F(DSBufferTBMImplTest, CanAcquireBuffer) +{ + auto bufferQueue = std::make_unique(3, 100, 100, IDSBuffer::FORMAT_ARGB8888); + EXPECT_TRUE(bufferQueue.get() != nullptr); + + auto buffer1 = bufferQueue->dequeueBuffer(); + EXPECT_TRUE(buffer1 != nullptr); + EXPECT_TRUE(bufferQueue->enqueueBuffer(buffer1)); + EXPECT_TRUE(bufferQueue->canAcquireBuffer(true)); +} -- 2.7.4