Expose name() of senders

Change-Id: Ia1e97cf5dc8f1e92728626b21fcf1b7f4da4e6b1
diff --git a/aos/events/event-loop.h b/aos/events/event-loop.h
index 0b336c3..a187981 100644
--- a/aos/events/event-loop.h
+++ b/aos/events/event-loop.h
@@ -73,6 +73,9 @@
   // Constructs an above message.
   Message MakeMessage();
 
+  // Returns the name of the underlying queue.
+  const char *name() const { return sender_->name(); }
+
  private:
   friend class EventLoop;
   Sender(std::unique_ptr<RawSender> sender) : sender_(std::move(sender)) {}
diff --git a/aos/events/raw-event-loop.h b/aos/events/raw-event-loop.h
index ffc894b..a903e93 100644
--- a/aos/events/raw-event-loop.h
+++ b/aos/events/raw-event-loop.h
@@ -60,6 +60,8 @@
     Free(reinterpret_cast<SendContext *>(t));
   }
 
+  virtual const char *name() const = 0;
+
  protected:
   RawSender(const RawSender &) = delete;
   RawSender &operator=(const RawSender &) = delete;
diff --git a/aos/events/shm-event-loop.cc b/aos/events/shm-event-loop.cc
index b05aa84..945ebc0 100644
--- a/aos/events/shm-event-loop.cc
+++ b/aos/events/shm-event-loop.cc
@@ -60,6 +60,8 @@
     return queue_->WriteMessage(msg, RawQueue::kOverride);
   }
 
+  const char *name() const override { return queue_->name(); }
+
  private:
   RawQueue *queue_;
 };
diff --git a/aos/events/simulated-event-loop.cc b/aos/events/simulated-event-loop.cc
index efce9ab..e82c381 100644
--- a/aos/events/simulated-event-loop.cc
+++ b/aos/events/simulated-event-loop.cc
@@ -43,6 +43,8 @@
     return true;  // Maybe false instead? :)
   }
 
+  const char *name() const override { return queue_->name(); }
+
  private:
   SimulatedQueue *queue_;
 };
@@ -93,8 +95,10 @@
     const ::std::pair<::std::string, QueueTypeInfo> &type) {
   auto it = queues_->find(type);
   if (it == queues_->end()) {
-    it = queues_->emplace(type, SimulatedQueue(type.second, scheduler_))
-             .first;
+    it =
+        queues_
+            ->emplace(type, SimulatedQueue(type.second, type.first, scheduler_))
+            .first;
   }
   return &it->second;
 }
diff --git a/aos/events/simulated-event-loop.h b/aos/events/simulated-event-loop.h
index 829ee8c..79b48b8 100644
--- a/aos/events/simulated-event-loop.h
+++ b/aos/events/simulated-event-loop.h
@@ -105,8 +105,9 @@
 
 class SimulatedQueue {
  public:
-  explicit SimulatedQueue(const QueueTypeInfo &type, EventScheduler *scheduler)
-      : type_(type), scheduler_(scheduler){};
+  explicit SimulatedQueue(const QueueTypeInfo &type, const ::std::string &name,
+                          EventScheduler *scheduler)
+      : type_(type), name_(name), scheduler_(scheduler){};
 
   std::unique_ptr<RawSender> MakeRawSender();
 
@@ -129,9 +130,12 @@
 
   size_t size() { return type_.size; }
 
+  const char *name() const { return name_.c_str(); }
+
  private:
   int64_t index_ = -1;
   QueueTypeInfo type_;
+  const ::std::string name_;
   ::std::vector<std::function<void(const aos::Message *message)>> watchers_;
   RefCountedBuffer latest_message_;
   EventScheduler *scheduler_;
diff --git a/aos/ipc_lib/queue.h b/aos/ipc_lib/queue.h
index f21295f..6fef1d5 100644
--- a/aos/ipc_lib/queue.h
+++ b/aos/ipc_lib/queue.h
@@ -144,6 +144,9 @@
   // only 1 task is using this object (ie in tests).
   int FreeMessages() const;
 
+  // Returns the name of the queue.
+  const char *name() const { return name_; }
+
  private:
   struct MessageHeader;