adb: fdevent: extract Add/Del/SetTimeout.

Test: adb_test
Change-Id: Ibed301f8de73289837153fdfed370a681c24ac55
This commit is contained in:
Josh Gao 2019-07-08 18:17:41 -07:00
parent 33944a2742
commit 35b29360a2
4 changed files with 18 additions and 22 deletions

View File

@ -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());

View File

@ -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

View File

@ -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) {

View File

@ -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;