diff options
| author | 2018-12-13 12:03:28 -0800 | |
|---|---|---|
| committer | 2018-12-13 13:52:01 -0800 | |
| commit | 29160fb83353746a5177ccbd663bd17d6747d8b1 (patch) | |
| tree | 58f5a4ffc3ff56d31150aaf13ee70c29c1a0673c | |
| parent | 48eead91fa9aa6c793b44fc674d515bc6b88117c (diff) | |
Expose mBufferId for GraphicBuffer
Bug: 118844974
Test: GraphicBuffer_test
Change-Id: I75a58b21e9943ffed9219a37e0d05c6697232bf4
| -rw-r--r-- | libs/ui/GraphicBuffer.cpp | 1 | ||||
| -rw-r--r-- | libs/ui/include/ui/GraphicBuffer.h | 7 | ||||
| -rw-r--r-- | libs/ui/tests/GraphicBuffer_test.cpp | 23 |
3 files changed, 31 insertions, 0 deletions
diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp index e606e26f8b..f408fcbe84 100644 --- a/libs/ui/GraphicBuffer.cpp +++ b/libs/ui/GraphicBuffer.cpp @@ -104,6 +104,7 @@ GraphicBuffer::GraphicBuffer(std::unique_ptr<BufferHubBuffer> buffer) : GraphicB buffer->desc().width, buffer->desc().height, static_cast<PixelFormat>(buffer->desc().format), buffer->desc().layers, buffer->desc().usage, buffer->desc().stride); + mBufferId = buffer->id(); mBufferHubBuffer = std::move(buffer); } #endif // LIBUI_IN_VNDK diff --git a/libs/ui/include/ui/GraphicBuffer.h b/libs/ui/include/ui/GraphicBuffer.h index 81f6cd9061..b73ca2b793 100644 --- a/libs/ui/include/ui/GraphicBuffer.h +++ b/libs/ui/include/ui/GraphicBuffer.h @@ -153,6 +153,7 @@ public: uint32_t getLayerCount() const { return static_cast<uint32_t>(layerCount); } Rect getBounds() const { return Rect(width, height); } uint64_t getId() const { return mId; } + int32_t getBufferId() const { return mBufferId; } uint32_t getGenerationNumber() const { return mGenerationNumber; } void setGenerationNumber(uint32_t generation) { @@ -247,6 +248,12 @@ private: uint64_t mId; + // System unique buffer ID. Note that this is different from mId, which is process unique. For + // GraphicBuffer backed by BufferHub, the mBufferId is a system unique identifier that stays the + // same cross process for the same chunck of underlying memory. Also note that this only applies + // to GraphicBuffers that are backed by BufferHub. + int32_t mBufferId = -1; + // Stores the generation number of this buffer. If this number does not // match the BufferQueue's internal generation number (set through // IGBP::setGenerationNumber), attempts to attach the buffer will fail. diff --git a/libs/ui/tests/GraphicBuffer_test.cpp b/libs/ui/tests/GraphicBuffer_test.cpp index 95ca2c16b3..81ab3acfe4 100644 --- a/libs/ui/tests/GraphicBuffer_test.cpp +++ b/libs/ui/tests/GraphicBuffer_test.cpp @@ -39,6 +39,7 @@ TEST_F(GraphicBufferTest, CreateFromBufferHubBuffer) { std::unique_ptr<BufferHubBuffer> b1 = BufferHubBuffer::Create(kTestWidth, kTestHeight, kTestLayerCount, kTestFormat, kTestUsage, /*userMetadataSize=*/0); + EXPECT_NE(b1, nullptr); EXPECT_TRUE(b1->IsValid()); sp<GraphicBuffer> gb(new GraphicBuffer(std::move(b1))); @@ -51,4 +52,26 @@ TEST_F(GraphicBufferTest, CreateFromBufferHubBuffer) { EXPECT_EQ(gb->getLayerCount(), kTestLayerCount); } +TEST_F(GraphicBufferTest, InvalidBufferIdForNoneBufferHubBuffer) { + sp<GraphicBuffer> gb( + new GraphicBuffer(kTestWidth, kTestHeight, kTestFormat, kTestLayerCount, kTestUsage)); + EXPECT_FALSE(gb->isBufferHubBuffer()); + EXPECT_EQ(gb->getBufferId(), -1); +} + +TEST_F(GraphicBufferTest, BufferIdMatchesBufferHubBufferId) { + std::unique_ptr<BufferHubBuffer> b1 = + BufferHubBuffer::Create(kTestWidth, kTestHeight, kTestLayerCount, kTestFormat, + kTestUsage, /*userMetadataSize=*/0); + EXPECT_NE(b1, nullptr); + EXPECT_TRUE(b1->IsValid()); + + int b1_id = b1->id(); + EXPECT_GE(b1_id, 0); + + sp<GraphicBuffer> gb(new GraphicBuffer(std::move(b1))); + EXPECT_TRUE(gb->isBufferHubBuffer()); + EXPECT_EQ(gb->getBufferId(), b1_id); +} + } // namespace android |