Add BufferHubEventFd to bufferhub system
Now BufferNode will create a new BufferHubEventFd instance during
allocation, BufferHubService will pass that fd to client side, and
BufferHubBuffer will now extract and import it.
User can now access the eventFd by a public function of BufferHubBuffer.
Update BufferHubBuffer_test to check if the two event fds are actually
linked to each other.
Test: VtsHalBufferHubV1_0TargetTest, BufferHubServer_test,
BufferHub_test
Fix: 68770788
Change-Id: I7f6e07d17615d2b45c0e7e086c481292c5798e97
diff --git a/libs/ui/BufferHubBuffer.cpp b/libs/ui/BufferHubBuffer.cpp
index 6310f29..9669135 100644
--- a/libs/ui/BufferHubBuffer.cpp
+++ b/libs/ui/BufferHubBuffer.cpp
@@ -167,19 +167,26 @@
return -EINVAL;
}
- int bufferId = bufferTraits.bufferInfo->data[1];
+ int bufferId = bufferTraits.bufferInfo->data[2];
if (bufferId < 0) {
ALOGE("%s: Received an invalid (negative) id!", __FUNCTION__);
return -EINVAL;
}
uint32_t clientBitMask;
- memcpy(&clientBitMask, &bufferTraits.bufferInfo->data[2], sizeof(clientBitMask));
+ memcpy(&clientBitMask, &bufferTraits.bufferInfo->data[3], sizeof(clientBitMask));
if (clientBitMask == 0U) {
ALOGE("%s: Received a invalid client state mask!", __FUNCTION__);
return -EINVAL;
}
+ const int eventFd = bufferTraits.bufferInfo->data[1];
+ if (eventFd < 0) {
+ ALOGE("%s: Received a invalid event fd!", __FUNCTION__);
+ return -EINVAL;
+ }
+ mEventFd = BufferHubEventFd(eventFd);
+
// Import the metadata. Dup since hidl_handle owns the fd
unique_fd ashmemFd(fcntl(bufferTraits.bufferInfo->data[0], F_DUPFD_CLOEXEC, 0));
mMetadata = BufferHubMetadata::Import(std::move(ashmemFd));
@@ -190,7 +197,7 @@
}
uint32_t userMetadataSize;
- memcpy(&userMetadataSize, &bufferTraits.bufferInfo->data[3], sizeof(userMetadataSize));
+ memcpy(&userMetadataSize, &bufferTraits.bufferInfo->data[4], sizeof(userMetadataSize));
if (mMetadata.user_metadata_size() != userMetadataSize) {
ALOGE("%s: user metadata size not match: expected %u, actual %zu.", __FUNCTION__,
userMetadataSize, mMetadata.user_metadata_size());
@@ -314,9 +321,8 @@
}
bool BufferHubBuffer::IsValid() const {
- // TODO(b/68770788): check eventFd once implemented
return mBufferHandle.getNativeHandle() != nullptr && mId >= 0 && mClientStateMask != 0U &&
- mMetadata.IsValid() && mBufferClient != nullptr;
+ mEventFd.get() >= 0 && mMetadata.IsValid() && mBufferClient != nullptr;
}
native_handle_t* BufferHubBuffer::Duplicate() {