Add set_name to event_loop.
Change-Id: I2ab1486eb8a348ceeec00ab170e2474d7fe25167
diff --git a/aos/events/raw-event-loop.h b/aos/events/raw-event-loop.h
index 6ff7179..7ab2810 100644
--- a/aos/events/raw-event-loop.h
+++ b/aos/events/raw-event-loop.h
@@ -138,6 +138,9 @@
// Use this to run code once the thread goes into "real-time-mode",
virtual void OnRun(::std::function<void()> on_run) = 0;
+ // Sets the name of the event loop.
+ virtual void set_name(const char *name) = 0;
+
// Threadsafe.
bool is_running() const { return is_running_.load(); }
diff --git a/aos/events/shm-event-loop.cc b/aos/events/shm-event-loop.cc
index 8c0f3a2..eead9f5 100644
--- a/aos/events/shm-event-loop.cc
+++ b/aos/events/shm-event-loop.cc
@@ -181,6 +181,8 @@
// Runs the watcher callback on new messages.
void Run() {
+ ::aos::SetCurrentThreadName(thread_state_->name() + ".watcher");
+
// Signal the main thread that we are now ready.
thread_state_->MaybeSetCurrentThreadRealtimePriority();
{
@@ -396,12 +398,16 @@
on_run_.push_back(::std::move(on_run));
}
+void ShmEventLoop::set_name(const char *name) { thread_state_.name_ = name; }
+
void ShmEventLoop::Run() {
// Start all the watcher threads.
for (::std::unique_ptr<internal::WatcherThreadState> &watcher : watchers_) {
watcher->Start();
}
+ ::aos::SetCurrentThreadName(thread_state_.name());
+
// Now, all the threads are up. Go RT.
thread_state_.MaybeSetCurrentThreadRealtimePriority();
set_is_running(true);
diff --git a/aos/events/shm-event-loop.h b/aos/events/shm-event-loop.h
index 91ca342..24cd909 100644
--- a/aos/events/shm-event-loop.h
+++ b/aos/events/shm-event-loop.h
@@ -62,6 +62,8 @@
thread_state_.priority_ = priority;
}
+ void set_name(const char *name) override;
+
private:
friend class internal::WatcherThreadState;
friend class internal::TimerHandlerState;
@@ -82,6 +84,8 @@
void MaybeSetCurrentThreadRealtimePriority();
+ const ::std::string &name() const { return name_; }
+
private:
friend class internal::WatcherThreadState;
friend class internal::TimerHandlerState;
@@ -96,6 +100,9 @@
::std::atomic<bool> loop_running_{false};
bool loop_finished_ = false;
int priority_ = -1;
+
+ // Immutable after Start is called.
+ ::std::string name_;
};
// Tracks that we can't have multiple watchers or a sender and a watcher (or
diff --git a/aos/events/simulated-event-loop.cc b/aos/events/simulated-event-loop.cc
index 94cf67a..71b0c79 100644
--- a/aos/events/simulated-event-loop.cc
+++ b/aos/events/simulated-event-loop.cc
@@ -239,6 +239,8 @@
scheduler_->Exit();
}
+ void set_name(const char *name) override { name_ = name; }
+
SimulatedQueue *GetSimulatedQueue(
const ::std::pair<::std::string, QueueTypeInfo> &);
@@ -257,6 +259,8 @@
::std::vector<std::string> taken_;
::std::vector<std::unique_ptr<TimerHandler>> timers_;
::std::vector<std::unique_ptr<PhasedLoopHandler>> phased_loops_;
+
+ ::std::string name_;
};
EventScheduler::Token EventScheduler::Schedule(