Loading libs/vr/libbufferhub/buffer_hub-test.cpp +5 −5 Original line number Original line Diff line number Diff line Loading @@ -710,7 +710,7 @@ TEST_F(LibBufferHubTest, TestOrphanedAcquire) { std::unique_ptr<ConsumerBuffer> c1 = std::unique_ptr<ConsumerBuffer> c1 = ConsumerBuffer::Import(p->CreateConsumer()); ConsumerBuffer::Import(p->CreateConsumer()); ASSERT_TRUE(c1.get() != nullptr); ASSERT_TRUE(c1.get() != nullptr); const uint64_t consumer_state_bit1 = c1->client_state_mask(); const uint64_t client_state_mask1 = c1->client_state_mask(); DvrNativeBufferMetadata meta; DvrNativeBufferMetadata meta; EXPECT_EQ(0, p->PostAsync(&meta, LocalHandle())); EXPECT_EQ(0, p->PostAsync(&meta, LocalHandle())); Loading @@ -726,8 +726,8 @@ TEST_F(LibBufferHubTest, TestOrphanedAcquire) { std::unique_ptr<ConsumerBuffer> c2 = std::unique_ptr<ConsumerBuffer> c2 = ConsumerBuffer::Import(p->CreateConsumer()); ConsumerBuffer::Import(p->CreateConsumer()); ASSERT_TRUE(c2.get() != nullptr); ASSERT_TRUE(c2.get() != nullptr); const uint64_t consumer_state_bit2 = c2->client_state_mask(); const uint64_t client_state_mask2 = c2->client_state_mask(); EXPECT_NE(consumer_state_bit1, consumer_state_bit2); EXPECT_NE(client_state_mask1, client_state_mask2); // The new consumer is available for acquire. // The new consumer is available for acquire. EXPECT_LT(0, RETRY_EINTR(c2->Poll(kPollTimeoutMs))); EXPECT_LT(0, RETRY_EINTR(c2->Poll(kPollTimeoutMs))); Loading @@ -742,8 +742,8 @@ TEST_F(LibBufferHubTest, TestOrphanedAcquire) { std::unique_ptr<ConsumerBuffer> c3 = std::unique_ptr<ConsumerBuffer> c3 = ConsumerBuffer::Import(p->CreateConsumer()); ConsumerBuffer::Import(p->CreateConsumer()); ASSERT_TRUE(c3.get() != nullptr); ASSERT_TRUE(c3.get() != nullptr); const uint64_t consumer_state_bit3 = c3->client_state_mask(); const uint64_t client_state_mask3 = c3->client_state_mask(); EXPECT_NE(consumer_state_bit2, consumer_state_bit3); EXPECT_NE(client_state_mask2, client_state_mask3); // The consumer buffer is not acquirable. // The consumer buffer is not acquirable. EXPECT_GE(0, RETRY_EINTR(c3->Poll(kPollTimeoutMs))); EXPECT_GE(0, RETRY_EINTR(c3->Poll(kPollTimeoutMs))); EXPECT_EQ(-EBUSY, c3->AcquireAsync(&meta, &fence)); EXPECT_EQ(-EBUSY, c3->AcquireAsync(&meta, &fence)); Loading libs/vr/libbufferhub/include/private/dvr/buffer_hub_defs.h +2 −2 Original line number Original line Diff line number Diff line Loading @@ -60,12 +60,12 @@ static inline bool IsBufferReleased(uint64_t state) { return !(state & kProducerStateBit) && (state & kConsumerStateMask); return !(state & kProducerStateBit) && (state & kConsumerStateMask); } } static inline uint64_t FindNextClearedBit(uint64_t bits) { static inline uint64_t FindNextAvailableClientStateMask(uint64_t bits) { return ~bits - (~bits & (~bits - 1)); return ~bits - (~bits & (~bits - 1)); } } static inline uint64_t FindFirstClearedBit() { static inline uint64_t FindFirstClearedBit() { return FindNextClearedBit(kProducerStateBit); return FindNextAvailableClientStateMask(kProducerStateBit); } } struct __attribute__((packed, aligned(8))) MetadataHeader { struct __attribute__((packed, aligned(8))) MetadataHeader { Loading libs/vr/libbufferhub/include/private/dvr/bufferhub_rpc.h +1 −3 Original line number Original line Diff line number Diff line Loading @@ -122,9 +122,7 @@ class BufferDescription { int buffer_cid() const { return buffer_cid_; } int buffer_cid() const { return buffer_cid_; } // State mask of the buffer client. Each BufferHub client backed by the // State mask of the buffer client. Each BufferHub client backed by the // same buffer channel has uniqued state bit among its siblings. For a // same buffer channel has uniqued state bit among its siblings. // producer buffer the bit must be kProducerStateBit; for a consumer the bit // must be one of the kConsumerStateMask. uint64_t client_state_mask() const { return client_state_mask_; } uint64_t client_state_mask() const { return client_state_mask_; } FileHandleType take_acquire_fence() { return std::move(acquire_fence_fd_); } FileHandleType take_acquire_fence() { return std::move(acquire_fence_fd_); } FileHandleType take_release_fence() { return std::move(release_fence_fd_); } FileHandleType take_release_fence() { return std::move(release_fence_fd_); } Loading services/vr/bufferhubd/buffer_node.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -44,8 +44,8 @@ uint64_t BufferNode::AddNewActiveClientsBitToMask() { uint64_t client_state_mask = 0ULL; uint64_t client_state_mask = 0ULL; uint64_t updated_active_clients_bit_mask = 0ULL; uint64_t updated_active_clients_bit_mask = 0ULL; do { do { client_state_mask = client_state_mask = BufferHubDefs::FindNextAvailableClientStateMask( BufferHubDefs::FindNextClearedBit(current_active_clients_bit_mask); current_active_clients_bit_mask); if (client_state_mask == 0ULL) { if (client_state_mask == 0ULL) { ALOGE( ALOGE( "BufferNode::AddNewActiveClientsBitToMask: reached the maximum " "BufferNode::AddNewActiveClientsBitToMask: reached the maximum " Loading services/vr/bufferhubd/consumer_channel.cpp +4 −4 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,10 @@ namespace android { namespace dvr { namespace dvr { ConsumerChannel::ConsumerChannel(BufferHubService* service, int buffer_id, ConsumerChannel::ConsumerChannel(BufferHubService* service, int buffer_id, int channel_id, uint64_t consumer_state_bit, int channel_id, uint64_t client_state_mask, const std::shared_ptr<Channel> producer) const std::shared_ptr<Channel> producer) : BufferHubChannel(service, buffer_id, channel_id, kConsumerType), : BufferHubChannel(service, buffer_id, channel_id, kConsumerType), consumer_state_bit_(consumer_state_bit), client_state_mask_(client_state_mask), producer_(producer) { producer_(producer) { GetProducer()->AddConsumer(this); GetProducer()->AddConsumer(this); } } Loading @@ -41,7 +41,7 @@ BufferHubChannel::BufferInfo ConsumerChannel::GetBufferInfo() const { // If producer has not hung up, copy most buffer info from the producer. // If producer has not hung up, copy most buffer info from the producer. info = producer->GetBufferInfo(); info = producer->GetBufferInfo(); } else { } else { info.signaled_mask = consumer_state_bit(); info.signaled_mask = client_state_mask(); } } info.id = buffer_id(); info.id = buffer_id(); return info; return info; Loading Loading @@ -100,7 +100,7 @@ Status<BufferDescription<BorrowedHandle>> ConsumerChannel::OnGetBuffer( ATRACE_NAME("ConsumerChannel::OnGetBuffer"); ATRACE_NAME("ConsumerChannel::OnGetBuffer"); ALOGD_IF(TRACE, "ConsumerChannel::OnGetBuffer: buffer=%d", buffer_id()); ALOGD_IF(TRACE, "ConsumerChannel::OnGetBuffer: buffer=%d", buffer_id()); if (auto producer = GetProducer()) { if (auto producer = GetProducer()) { return {producer->GetBuffer(consumer_state_bit_)}; return {producer->GetBuffer(client_state_mask_)}; } else { } else { return ErrorStatus(EPIPE); return ErrorStatus(EPIPE); } } Loading Loading
libs/vr/libbufferhub/buffer_hub-test.cpp +5 −5 Original line number Original line Diff line number Diff line Loading @@ -710,7 +710,7 @@ TEST_F(LibBufferHubTest, TestOrphanedAcquire) { std::unique_ptr<ConsumerBuffer> c1 = std::unique_ptr<ConsumerBuffer> c1 = ConsumerBuffer::Import(p->CreateConsumer()); ConsumerBuffer::Import(p->CreateConsumer()); ASSERT_TRUE(c1.get() != nullptr); ASSERT_TRUE(c1.get() != nullptr); const uint64_t consumer_state_bit1 = c1->client_state_mask(); const uint64_t client_state_mask1 = c1->client_state_mask(); DvrNativeBufferMetadata meta; DvrNativeBufferMetadata meta; EXPECT_EQ(0, p->PostAsync(&meta, LocalHandle())); EXPECT_EQ(0, p->PostAsync(&meta, LocalHandle())); Loading @@ -726,8 +726,8 @@ TEST_F(LibBufferHubTest, TestOrphanedAcquire) { std::unique_ptr<ConsumerBuffer> c2 = std::unique_ptr<ConsumerBuffer> c2 = ConsumerBuffer::Import(p->CreateConsumer()); ConsumerBuffer::Import(p->CreateConsumer()); ASSERT_TRUE(c2.get() != nullptr); ASSERT_TRUE(c2.get() != nullptr); const uint64_t consumer_state_bit2 = c2->client_state_mask(); const uint64_t client_state_mask2 = c2->client_state_mask(); EXPECT_NE(consumer_state_bit1, consumer_state_bit2); EXPECT_NE(client_state_mask1, client_state_mask2); // The new consumer is available for acquire. // The new consumer is available for acquire. EXPECT_LT(0, RETRY_EINTR(c2->Poll(kPollTimeoutMs))); EXPECT_LT(0, RETRY_EINTR(c2->Poll(kPollTimeoutMs))); Loading @@ -742,8 +742,8 @@ TEST_F(LibBufferHubTest, TestOrphanedAcquire) { std::unique_ptr<ConsumerBuffer> c3 = std::unique_ptr<ConsumerBuffer> c3 = ConsumerBuffer::Import(p->CreateConsumer()); ConsumerBuffer::Import(p->CreateConsumer()); ASSERT_TRUE(c3.get() != nullptr); ASSERT_TRUE(c3.get() != nullptr); const uint64_t consumer_state_bit3 = c3->client_state_mask(); const uint64_t client_state_mask3 = c3->client_state_mask(); EXPECT_NE(consumer_state_bit2, consumer_state_bit3); EXPECT_NE(client_state_mask2, client_state_mask3); // The consumer buffer is not acquirable. // The consumer buffer is not acquirable. EXPECT_GE(0, RETRY_EINTR(c3->Poll(kPollTimeoutMs))); EXPECT_GE(0, RETRY_EINTR(c3->Poll(kPollTimeoutMs))); EXPECT_EQ(-EBUSY, c3->AcquireAsync(&meta, &fence)); EXPECT_EQ(-EBUSY, c3->AcquireAsync(&meta, &fence)); Loading
libs/vr/libbufferhub/include/private/dvr/buffer_hub_defs.h +2 −2 Original line number Original line Diff line number Diff line Loading @@ -60,12 +60,12 @@ static inline bool IsBufferReleased(uint64_t state) { return !(state & kProducerStateBit) && (state & kConsumerStateMask); return !(state & kProducerStateBit) && (state & kConsumerStateMask); } } static inline uint64_t FindNextClearedBit(uint64_t bits) { static inline uint64_t FindNextAvailableClientStateMask(uint64_t bits) { return ~bits - (~bits & (~bits - 1)); return ~bits - (~bits & (~bits - 1)); } } static inline uint64_t FindFirstClearedBit() { static inline uint64_t FindFirstClearedBit() { return FindNextClearedBit(kProducerStateBit); return FindNextAvailableClientStateMask(kProducerStateBit); } } struct __attribute__((packed, aligned(8))) MetadataHeader { struct __attribute__((packed, aligned(8))) MetadataHeader { Loading
libs/vr/libbufferhub/include/private/dvr/bufferhub_rpc.h +1 −3 Original line number Original line Diff line number Diff line Loading @@ -122,9 +122,7 @@ class BufferDescription { int buffer_cid() const { return buffer_cid_; } int buffer_cid() const { return buffer_cid_; } // State mask of the buffer client. Each BufferHub client backed by the // State mask of the buffer client. Each BufferHub client backed by the // same buffer channel has uniqued state bit among its siblings. For a // same buffer channel has uniqued state bit among its siblings. // producer buffer the bit must be kProducerStateBit; for a consumer the bit // must be one of the kConsumerStateMask. uint64_t client_state_mask() const { return client_state_mask_; } uint64_t client_state_mask() const { return client_state_mask_; } FileHandleType take_acquire_fence() { return std::move(acquire_fence_fd_); } FileHandleType take_acquire_fence() { return std::move(acquire_fence_fd_); } FileHandleType take_release_fence() { return std::move(release_fence_fd_); } FileHandleType take_release_fence() { return std::move(release_fence_fd_); } Loading
services/vr/bufferhubd/buffer_node.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -44,8 +44,8 @@ uint64_t BufferNode::AddNewActiveClientsBitToMask() { uint64_t client_state_mask = 0ULL; uint64_t client_state_mask = 0ULL; uint64_t updated_active_clients_bit_mask = 0ULL; uint64_t updated_active_clients_bit_mask = 0ULL; do { do { client_state_mask = client_state_mask = BufferHubDefs::FindNextAvailableClientStateMask( BufferHubDefs::FindNextClearedBit(current_active_clients_bit_mask); current_active_clients_bit_mask); if (client_state_mask == 0ULL) { if (client_state_mask == 0ULL) { ALOGE( ALOGE( "BufferNode::AddNewActiveClientsBitToMask: reached the maximum " "BufferNode::AddNewActiveClientsBitToMask: reached the maximum " Loading
services/vr/bufferhubd/consumer_channel.cpp +4 −4 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,10 @@ namespace android { namespace dvr { namespace dvr { ConsumerChannel::ConsumerChannel(BufferHubService* service, int buffer_id, ConsumerChannel::ConsumerChannel(BufferHubService* service, int buffer_id, int channel_id, uint64_t consumer_state_bit, int channel_id, uint64_t client_state_mask, const std::shared_ptr<Channel> producer) const std::shared_ptr<Channel> producer) : BufferHubChannel(service, buffer_id, channel_id, kConsumerType), : BufferHubChannel(service, buffer_id, channel_id, kConsumerType), consumer_state_bit_(consumer_state_bit), client_state_mask_(client_state_mask), producer_(producer) { producer_(producer) { GetProducer()->AddConsumer(this); GetProducer()->AddConsumer(this); } } Loading @@ -41,7 +41,7 @@ BufferHubChannel::BufferInfo ConsumerChannel::GetBufferInfo() const { // If producer has not hung up, copy most buffer info from the producer. // If producer has not hung up, copy most buffer info from the producer. info = producer->GetBufferInfo(); info = producer->GetBufferInfo(); } else { } else { info.signaled_mask = consumer_state_bit(); info.signaled_mask = client_state_mask(); } } info.id = buffer_id(); info.id = buffer_id(); return info; return info; Loading Loading @@ -100,7 +100,7 @@ Status<BufferDescription<BorrowedHandle>> ConsumerChannel::OnGetBuffer( ATRACE_NAME("ConsumerChannel::OnGetBuffer"); ATRACE_NAME("ConsumerChannel::OnGetBuffer"); ALOGD_IF(TRACE, "ConsumerChannel::OnGetBuffer: buffer=%d", buffer_id()); ALOGD_IF(TRACE, "ConsumerChannel::OnGetBuffer: buffer=%d", buffer_id()); if (auto producer = GetProducer()) { if (auto producer = GetProducer()) { return {producer->GetBuffer(consumer_state_bit_)}; return {producer->GetBuffer(client_state_mask_)}; } else { } else { return ErrorStatus(EPIPE); return ErrorStatus(EPIPE); } } Loading