adb: fdevent: extract Create/Destroy from fdevent_context_poll.

Test: adb_test
Change-Id: Ida308e8e281cbb2954277196a51945f124ce5823
diff --git a/adb/fdevent/fdevent.h b/adb/fdevent/fdevent.h
index e84cff7..3a3682f 100644
--- a/adb/fdevent/fdevent.h
+++ b/adb/fdevent/fdevent.h
@@ -55,11 +55,19 @@
     virtual ~fdevent_context() = default;
 
     // Allocate and initialize a new fdevent object.
-    virtual fdevent* Create(unique_fd fd, std::variant<fd_func, fd_func2> func, void* arg) = 0;
+    fdevent* Create(unique_fd fd, std::variant<fd_func, fd_func2> func, void* arg);
 
     // Deallocate an fdevent object, returning the file descriptor that was owned by it.
-    virtual unique_fd Destroy(fdevent* fde) = 0;
+    unique_fd Destroy(fdevent* fde);
 
+  protected:
+    // Register an fdevent that is being created by Create with the fdevent_context.
+    virtual void Register(fdevent* fde) = 0;
+
+    // Unregister an fdevent that is being destroyed by Destroy with the fdevent_context.
+    virtual void Unregister(fdevent* fde) = 0;
+
+  public:
     // Change which events should cause notifications.
     virtual void Set(fdevent* fde, unsigned events) = 0;
     virtual void Add(fdevent* fde, unsigned events) = 0;
@@ -98,6 +106,7 @@
     std::atomic<bool> terminate_loop_ = false;
 
   private:
+    uint64_t fdevent_id_ = 0;
     std::mutex run_queue_mutex_;
     std::deque<std::function<void()>> run_queue_ GUARDED_BY(run_queue_mutex_);
 };