diff options
-rw-r--r-- | libs/ui/BufferHubEventFd.cpp | 2 | ||||
-rw-r--r-- | libs/ui/include/ui/BufferHubEventFd.h | 6 | ||||
-rw-r--r-- | libs/ui/tests/BufferHubEventFd_test.cpp | 9 |
3 files changed, 12 insertions, 5 deletions
diff --git a/libs/ui/BufferHubEventFd.cpp b/libs/ui/BufferHubEventFd.cpp index 978b3526f3..bffc2ca803 100644 --- a/libs/ui/BufferHubEventFd.cpp +++ b/libs/ui/BufferHubEventFd.cpp @@ -23,6 +23,8 @@ namespace android { BufferHubEventFd::BufferHubEventFd() : mFd(eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK)) {} +BufferHubEventFd::BufferHubEventFd(int fd) : mFd(fd) {} + status_t BufferHubEventFd::signal() const { if (!isValid()) { ALOGE("%s: cannot signal an invalid eventfd.", __FUNCTION__); diff --git a/libs/ui/include/ui/BufferHubEventFd.h b/libs/ui/include/ui/BufferHubEventFd.h index 0e856bdb67..8772304c0f 100644 --- a/libs/ui/include/ui/BufferHubEventFd.h +++ b/libs/ui/include/ui/BufferHubEventFd.h @@ -30,6 +30,12 @@ public: BufferHubEventFd(); /** + * Constructs from a valid event fd. Caller is responsible for the validity of the fd. Takes + * ownership. + */ + BufferHubEventFd(int fd); + + /** * Returns whether this BufferHubEventFd holds a valid event_fd. */ bool isValid() const { return get() >= 0; } diff --git a/libs/ui/tests/BufferHubEventFd_test.cpp b/libs/ui/tests/BufferHubEventFd_test.cpp index 92fb33ff48..2c9aa576fe 100644 --- a/libs/ui/tests/BufferHubEventFd_test.cpp +++ b/libs/ui/tests/BufferHubEventFd_test.cpp @@ -91,22 +91,21 @@ TEST_F(BufferHubEventFdTest, EventFd_testDupEventFd) { // Technically, the dupliated eventFd and the original eventFd are pointing // to the same kernel object. This test signals the duplicated eventFd but epolls the origianl // eventFd. - base::unique_fd dupedEventFd(dup(eventFd.get())); + BufferHubEventFd dupedEventFd(dup(eventFd.get())); ASSERT_GE(dupedEventFd.get(), 0); std::array<epoll_event, 1> events; EXPECT_EQ(epoll_wait(epollFd.get(), events.data(), events.size(), 0), 0); - eventfd_write(dupedEventFd.get(), 1); + dupedEventFd.signal(); EXPECT_EQ(epoll_wait(epollFd.get(), events.data(), events.size(), 0), 1); // The epoll fd is edge triggered, so it only responds to the eventFd once. EXPECT_EQ(epoll_wait(epollFd.get(), events.data(), events.size(), 0), 0); - eventfd_write(dupedEventFd.get(), 1); + dupedEventFd.signal(); - eventfd_t value; - eventfd_read(dupedEventFd.get(), &value); + dupedEventFd.clear(); EXPECT_EQ(epoll_wait(epollFd.get(), events.data(), events.size(), 0), 0); } |