Skip to content

Commit 25c0f06

Browse files
committed
move syncTimeline addWaiter to doOnReadable
1 parent 8ab3402 commit 25c0f06

File tree

3 files changed

+2
-83
lines changed

3 files changed

+2
-83
lines changed

src/helpers/sync/SyncTimeline.cpp

Lines changed: 2 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,6 @@ SP<CSyncTimeline> CSyncTimeline::create(int drmFD_, CFileDescriptor&& drmSyncobj
3434
}
3535

3636
CSyncTimeline::~CSyncTimeline() {
37-
for (auto& w : waiters) {
38-
if (w->source) {
39-
wl_event_source_remove(w->source);
40-
w->source = nullptr;
41-
}
42-
}
43-
4437
if (handle == 0)
4538
return;
4639

@@ -64,34 +57,8 @@ std::optional<bool> CSyncTimeline::check(uint64_t point, uint32_t flags) {
6457
return ret == 0;
6558
}
6659

67-
static int handleWaiterFD(int fd, uint32_t mask, void* data) {
68-
auto waiter = (CSyncTimeline::SWaiter*)data;
69-
70-
if (mask & (WL_EVENT_HANGUP | WL_EVENT_ERROR)) {
71-
Debug::log(ERR, "handleWaiterFD: eventfd error");
72-
return 0;
73-
}
74-
75-
if (mask & WL_EVENT_READABLE) {
76-
uint64_t value = 0;
77-
if (read(fd, &value, sizeof(value)) <= 0)
78-
Debug::log(ERR, "handleWaiterFD: failed to read from eventfd");
79-
}
80-
81-
wl_event_source_remove(waiter->source);
82-
waiter->source = nullptr;
83-
84-
if (waiter->fn)
85-
waiter->fn();
86-
87-
if (waiter->timeline)
88-
waiter->timeline->removeWaiter(waiter);
89-
90-
return 0;
91-
}
92-
9360
bool CSyncTimeline::addWaiter(const std::function<void()>& waiter, uint64_t point, uint32_t flags) {
94-
CFileDescriptor eventFd = CFileDescriptor{eventfd(0, EFD_CLOEXEC)};
61+
auto eventFd = CFileDescriptor(eventfd(0, EFD_CLOEXEC));
9562

9663
if (!eventFd.isValid()) {
9764
Debug::log(ERR, "CSyncTimeline::addWaiter: failed to acquire an eventfd");
@@ -103,46 +70,11 @@ bool CSyncTimeline::addWaiter(const std::function<void()>& waiter, uint64_t poin
10370
return false;
10471
}
10572

106-
if (eventFd.isReadable()) {
107-
waiter();
108-
return true;
109-
}
110-
111-
auto w = makeShared<SWaiter>();
112-
w->fn = waiter;
113-
w->timeline = self;
114-
w->eventFd = std::move(eventFd);
115-
116-
w->source = wl_event_loop_add_fd(g_pEventLoopManager->m_sWayland.loop, w->eventFd.get(), WL_EVENT_READABLE, ::handleWaiterFD, w.get());
117-
if (!w->source) {
118-
Debug::log(ERR, "CSyncTimeline::addWaiter: wl_event_loop_add_fd failed");
119-
return false;
120-
}
121-
122-
waiters.emplace_back(w);
73+
g_pEventLoopManager->doOnReadable(std::move(eventFd), waiter);
12374

12475
return true;
12576
}
12677

127-
void CSyncTimeline::removeWaiter(SWaiter* w) {
128-
if (w->source) {
129-
wl_event_source_remove(w->source);
130-
w->source = nullptr;
131-
}
132-
std::erase_if(waiters, [w](const auto& e) { return e.get() == w; });
133-
}
134-
135-
void CSyncTimeline::removeAllWaiters() {
136-
for (auto& w : waiters) {
137-
if (w->source) {
138-
wl_event_source_remove(w->source);
139-
w->source = nullptr;
140-
}
141-
}
142-
143-
waiters.clear();
144-
}
145-
14678
CFileDescriptor CSyncTimeline::exportAsSyncFileFD(uint64_t src) {
14779
int sync = -1;
14880

src/helpers/sync/SyncTimeline.hpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,12 @@ class CSyncTimeline {
2020
static SP<CSyncTimeline> create(int drmFD_, Hyprutils::OS::CFileDescriptor&& drmSyncobjFD);
2121
~CSyncTimeline();
2222

23-
struct SWaiter {
24-
std::function<void()> fn;
25-
wl_event_source* source = nullptr;
26-
WP<CSyncTimeline> timeline;
27-
Hyprutils::OS::CFileDescriptor eventFd;
28-
};
29-
3023
// check if the timeline point has been signaled
3124
// flags: DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE
3225
// std::nullopt on fail
3326
std::optional<bool> check(uint64_t point, uint32_t flags);
3427

3528
bool addWaiter(const std::function<void()>& waiter, uint64_t point, uint32_t flags);
36-
void removeWaiter(SWaiter*);
37-
void removeAllWaiters();
3829
Hyprutils::OS::CFileDescriptor exportAsSyncFileFD(uint64_t src);
3930
bool importFromSyncFileFD(uint64_t dst, Hyprutils::OS::CFileDescriptor& fd);
4031
bool transfer(SP<CSyncTimeline> from, uint64_t fromPoint, uint64_t toPoint);
@@ -47,6 +38,4 @@ class CSyncTimeline {
4738

4839
private:
4940
CSyncTimeline() = default;
50-
51-
std::vector<SP<SWaiter>> waiters;
5241
};

src/managers/eventLoop/EventLoopManager.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,6 @@ class CEventLoopManager {
7878
} m_sListeners;
7979

8080
wl_event_source* m_configWatcherInotifySource = nullptr;
81-
82-
friend class CSyncTimeline;
8381
};
8482

8583
inline UP<CEventLoopManager> g_pEventLoopManager;

0 commit comments

Comments
 (0)