adb: fdevent: extract Add/Del/SetTimeout.
Test: adb_test Change-Id: Ibed301f8de73289837153fdfed370a681c24ac55
This commit is contained in:
parent
33944a2742
commit
35b29360a2
|
@ -83,6 +83,21 @@ unique_fd fdevent_context::Destroy(fdevent* fde) {
|
|||
return result;
|
||||
}
|
||||
|
||||
void fdevent_context::Add(fdevent* fde, unsigned events) {
|
||||
Set(fde, (fde->state & FDE_EVENTMASK) | events);
|
||||
}
|
||||
|
||||
void fdevent_context::Del(fdevent* fde, unsigned events) {
|
||||
CHECK(!(events & FDE_TIMEOUT));
|
||||
Set(fde, (fde->state & FDE_EVENTMASK) & ~events);
|
||||
}
|
||||
|
||||
void fdevent_context::SetTimeout(fdevent* fde, std::optional<std::chrono::milliseconds> timeout) {
|
||||
CheckMainThread();
|
||||
fde->timeout = timeout;
|
||||
fde->last_active = std::chrono::steady_clock::now();
|
||||
}
|
||||
|
||||
void fdevent_context::CheckMainThread() {
|
||||
if (main_thread_id_) {
|
||||
CHECK_EQ(*main_thread_id_, android::base::GetThreadId());
|
||||
|
|
|
@ -70,14 +70,14 @@ struct fdevent_context {
|
|||
public:
|
||||
// Change which events should cause notifications.
|
||||
virtual void Set(fdevent* fde, unsigned events) = 0;
|
||||
virtual void Add(fdevent* fde, unsigned events) = 0;
|
||||
virtual void Del(fdevent* fde, unsigned events) = 0;
|
||||
void Add(fdevent* fde, unsigned events);
|
||||
void Del(fdevent* fde, unsigned events);
|
||||
|
||||
// Set a timeout on an fdevent.
|
||||
// If no events are triggered by the timeout, an FDE_TIMEOUT will be generated.
|
||||
// Note timeouts are not defused automatically; if a timeout is set on an fdevent, it will
|
||||
// trigger repeatedly every |timeout| ms.
|
||||
virtual void SetTimeout(fdevent* fde, std::optional<std::chrono::milliseconds> timeout) = 0;
|
||||
void SetTimeout(fdevent* fde, std::optional<std::chrono::milliseconds> timeout);
|
||||
|
||||
// Loop until TerminateLoop is called, handling events.
|
||||
// Implementations should call FlushRunQueue on every iteration, and check the value of
|
||||
|
|
|
@ -131,22 +131,6 @@ void fdevent_context_poll::Set(fdevent* fde, unsigned events) {
|
|||
}
|
||||
}
|
||||
|
||||
void fdevent_context_poll::Add(fdevent* fde, unsigned events) {
|
||||
Set(fde, (fde->state & FDE_EVENTMASK) | events);
|
||||
}
|
||||
|
||||
void fdevent_context_poll::Del(fdevent* fde, unsigned events) {
|
||||
CHECK(!(events & FDE_TIMEOUT));
|
||||
Set(fde, (fde->state & FDE_EVENTMASK) & ~events);
|
||||
}
|
||||
|
||||
void fdevent_context_poll::SetTimeout(fdevent* fde,
|
||||
std::optional<std::chrono::milliseconds> timeout) {
|
||||
CheckMainThread();
|
||||
fde->timeout = timeout;
|
||||
fde->last_active = std::chrono::steady_clock::now();
|
||||
}
|
||||
|
||||
static std::string dump_pollfds(const std::vector<adb_pollfd>& pollfds) {
|
||||
std::string result;
|
||||
for (const auto& pollfd : pollfds) {
|
||||
|
|
|
@ -52,9 +52,6 @@ struct fdevent_context_poll : public fdevent_context {
|
|||
virtual void Unregister(fdevent* fde) final;
|
||||
|
||||
virtual void Set(fdevent* fde, unsigned events) final;
|
||||
virtual void Add(fdevent* fde, unsigned events) final;
|
||||
virtual void Del(fdevent* fde, unsigned events) final;
|
||||
virtual void SetTimeout(fdevent* fde, std::optional<std::chrono::milliseconds> timeout) final;
|
||||
|
||||
virtual void Loop() final;
|
||||
|
||||
|
|
Loading…
Reference in New Issue