blob: b9f1c81c63c7ec132d85c81023440d4c0d4e7300 [file] [log] [blame]
Fan Xu574a6852018-11-02 13:22:42 -07001#include <errno.h>
Fan Xucfbe0742018-11-21 15:03:32 -08002
3#include <bufferhub/BufferNode.h>
Fan Xu574a6852018-11-02 13:22:42 -07004#include <gmock/gmock.h>
5#include <gtest/gtest.h>
Fan Xud34a80a2018-12-04 11:32:39 -08006#include <ui/BufferHubDefs.h>
Fan Xu574a6852018-11-02 13:22:42 -07007#include <ui/GraphicBufferMapper.h>
8
9namespace android {
10namespace frameworks {
11namespace bufferhub {
12namespace V1_0 {
13namespace implementation {
14
15namespace {
16
17using testing::NotNull;
18
19const uint32_t kWidth = 640;
20const uint32_t kHeight = 480;
21const uint32_t kLayerCount = 1;
22const uint32_t kFormat = 1;
23const uint64_t kUsage = 0;
24const size_t kUserMetadataSize = 0;
Fan Xu574a6852018-11-02 13:22:42 -070025
26class BufferNodeTest : public ::testing::Test {
27protected:
28 void SetUp() override {
29 buffer_node =
30 new BufferNode(kWidth, kHeight, kLayerCount, kFormat, kUsage, kUserMetadataSize);
Tianyu Jiang727ede42019-02-01 11:44:51 -080031 ASSERT_TRUE(buffer_node->isValid());
Fan Xu574a6852018-11-02 13:22:42 -070032 }
33
34 void TearDown() override {
35 if (buffer_node != nullptr) {
36 delete buffer_node;
37 }
38 }
39
40 BufferNode* buffer_node = nullptr;
41};
42
43TEST_F(BufferNodeTest, TestCreateBufferNode) {
Tianyu Jiang727ede42019-02-01 11:44:51 -080044 EXPECT_EQ(buffer_node->userMetadataSize(), kUserMetadataSize);
Fan Xu574a6852018-11-02 13:22:42 -070045 // Test the handle just allocated is good (i.e. able to be imported)
46 GraphicBufferMapper& mapper = GraphicBufferMapper::get();
47 const native_handle_t* outHandle;
48 status_t ret =
Tianyu Jiang727ede42019-02-01 11:44:51 -080049 mapper.importBuffer(buffer_node->bufferHandle(), buffer_node->bufferDesc().width,
50 buffer_node->bufferDesc().height, buffer_node->bufferDesc().layers,
51 buffer_node->bufferDesc().format, buffer_node->bufferDesc().usage,
52 buffer_node->bufferDesc().stride, &outHandle);
Fan Xu574a6852018-11-02 13:22:42 -070053 EXPECT_EQ(ret, OK);
54 EXPECT_THAT(outHandle, NotNull());
55}
56
Tianyu Jiang727ede42019-02-01 11:44:51 -080057TEST_F(BufferNodeTest, TestaddNewActiveClientsBitToMask_twoNewClients) {
58 uint32_t new_client_state_mask_1 = buffer_node->addNewActiveClientsBitToMask();
59 EXPECT_EQ(buffer_node->getActiveClientsBitMask(), new_client_state_mask_1);
Fan Xu574a6852018-11-02 13:22:42 -070060
61 // Request and add a new client_state_mask again.
62 // Active clients bit mask should be the union of the two new
63 // client_state_masks.
Tianyu Jiang727ede42019-02-01 11:44:51 -080064 uint32_t new_client_state_mask_2 = buffer_node->addNewActiveClientsBitToMask();
65 EXPECT_EQ(buffer_node->getActiveClientsBitMask(),
Fan Xu574a6852018-11-02 13:22:42 -070066 new_client_state_mask_1 | new_client_state_mask_2);
67}
68
Tianyu Jiang727ede42019-02-01 11:44:51 -080069TEST_F(BufferNodeTest, TestaddNewActiveClientsBitToMask_32NewClients) {
Tianyu Jianga99f9112018-12-13 18:23:07 -080070 uint32_t new_client_state_mask = 0U;
71 uint32_t current_mask = 0U;
72 uint32_t expected_mask = 0U;
Fan Xu574a6852018-11-02 13:22:42 -070073
Fan Xud34a80a2018-12-04 11:32:39 -080074 for (int i = 0; i < BufferHubDefs::kMaxNumberOfClients; ++i) {
Tianyu Jiang727ede42019-02-01 11:44:51 -080075 new_client_state_mask = buffer_node->addNewActiveClientsBitToMask();
Fan Xub59847c2018-12-19 15:49:00 -080076 EXPECT_NE(new_client_state_mask, 0U);
Fan Xu574a6852018-11-02 13:22:42 -070077 EXPECT_FALSE(new_client_state_mask & current_mask);
78 expected_mask = current_mask | new_client_state_mask;
Tianyu Jiang727ede42019-02-01 11:44:51 -080079 current_mask = buffer_node->getActiveClientsBitMask();
Fan Xu574a6852018-11-02 13:22:42 -070080 EXPECT_EQ(current_mask, expected_mask);
81 }
82
83 // Method should fail upon requesting for more than maximum allowable clients.
Tianyu Jiang727ede42019-02-01 11:44:51 -080084 new_client_state_mask = buffer_node->addNewActiveClientsBitToMask();
Tianyu Jianga99f9112018-12-13 18:23:07 -080085 EXPECT_EQ(new_client_state_mask, 0U);
Fan Xu574a6852018-11-02 13:22:42 -070086 EXPECT_EQ(errno, E2BIG);
87}
88
89TEST_F(BufferNodeTest, TestRemoveActiveClientsBitFromMask) {
Tianyu Jiang727ede42019-02-01 11:44:51 -080090 buffer_node->addNewActiveClientsBitToMask();
91 uint32_t current_mask = buffer_node->getActiveClientsBitMask();
92 uint32_t new_client_state_mask = buffer_node->addNewActiveClientsBitToMask();
93 EXPECT_NE(buffer_node->getActiveClientsBitMask(), current_mask);
Fan Xu574a6852018-11-02 13:22:42 -070094
Tianyu Jiang727ede42019-02-01 11:44:51 -080095 buffer_node->removeClientsBitFromMask(new_client_state_mask);
96 EXPECT_EQ(buffer_node->getActiveClientsBitMask(), current_mask);
Fan Xu574a6852018-11-02 13:22:42 -070097
98 // Remove the test_mask again to the active client bit mask should not modify
99 // the value of active clients bit mask.
Tianyu Jiang727ede42019-02-01 11:44:51 -0800100 buffer_node->removeClientsBitFromMask(new_client_state_mask);
101 EXPECT_EQ(buffer_node->getActiveClientsBitMask(), current_mask);
Fan Xu574a6852018-11-02 13:22:42 -0700102}
103
104} // namespace
105
106} // namespace implementation
107} // namespace V1_0
108} // namespace bufferhub
109} // namespace frameworks
110} // namespace android