Add TimerHandler to event loop

Change-Id: I85c9142bcff9bf2cc5b8d003d24b8d77567fbe4a
diff --git a/aos/events/shm-event-loop.h b/aos/events/shm-event-loop.h
index 9ee7926..e40ccce 100644
--- a/aos/events/shm-event-loop.h
+++ b/aos/events/shm-event-loop.h
@@ -8,6 +8,7 @@
 namespace internal {
 
 class WatcherThreadState;
+class TimerHandlerState;
 
 }  // namespace internal
 
@@ -31,12 +32,15 @@
       const std::string &path, const QueueTypeInfo &type,
       std::function<void(const aos::Message *message)> watcher) override;
 
+  TimerHandler *AddTimer(::std::function<void()> callback) override;
+
   void OnRun(std::function<void()> on_run) override;
   void Run() override;
   void Exit() override;
 
  private:
   friend class internal::WatcherThreadState;
+  friend class internal::TimerHandlerState;
   // This ThreadState ensures that two watchers in the same loop cannot be
   // triggered concurrently.  Because watchers block threads indefinitely, this
   // has to be shared_ptr in case the EventLoop is destroyed before the thread
@@ -53,6 +57,7 @@
 
    private:
     friend class internal::WatcherThreadState;
+    friend class internal::TimerHandlerState;
     friend class ShmEventLoop;
 
     // This mutex ensures that only one watch event happens at a time.