Convert ControlLoop over to using EventLoop
Next step is to pass in the event loop and flip over to using it in
tests and at runtime.
Change-Id: Ia3b8f099e4eacc0ffa8fbfe00d651f3684a8c783
diff --git a/aos/events/BUILD b/aos/events/BUILD
index ad888f6..a5e83a9 100644
--- a/aos/events/BUILD
+++ b/aos/events/BUILD
@@ -1,74 +1,77 @@
-
cc_library(
- name = "raw-event-loop",
- hdrs = ["raw-event-loop.h"],
- deps = [
- "//aos/time:time",
- "//aos:queues",
- ],
+ name = "raw-event-loop",
+ hdrs = ["raw-event-loop.h"],
+ deps = [
+ "//aos:queues",
+ "//aos/time",
+ ],
)
cc_library(
- name = "event-loop",
- hdrs = ["event-loop.h", "raw-event-loop.h"],
- srcs = ["event-loop-tmpl.h"],
- deps = [
- ":raw-event-loop",
- "//aos/time:time",
- "//aos:queues",
- ],
+ name = "event-loop",
+ srcs = ["event-loop-tmpl.h"],
+ hdrs = [
+ "event-loop.h",
+ "raw-event-loop.h",
+ ],
+ visibility = ["//visibility:public"],
+ deps = [
+ ":raw-event-loop",
+ "//aos:queues",
+ "//aos/time",
+ ],
)
cc_library(
- name = "shm-event-loop",
- hdrs = ["shm-event-loop.h"],
- srcs = ["shm-event-loop.cc"],
- deps = [
- ":event-loop",
- "//aos:queues",
- "//aos/logging:logging",
- ],
+ name = "shm-event-loop",
+ srcs = ["shm-event-loop.cc"],
+ hdrs = ["shm-event-loop.h"],
+ visibility = ["//visibility:public"],
+ deps = [
+ ":event-loop",
+ "//aos:queues",
+ "//aos/logging",
+ ],
)
cc_test(
- name = "shm-event-loop_test",
- srcs = ["shm-event-loop_test.cc"],
- deps = [
- ":event-loop_param_test",
- ":shm-event-loop",
- "//aos/testing:test_shm",
- ],
+ name = "shm-event-loop_test",
+ srcs = ["shm-event-loop_test.cc"],
+ deps = [
+ ":event-loop_param_test",
+ ":shm-event-loop",
+ "//aos/testing:test_shm",
+ ],
)
cc_library(
- name = "event-loop_param_test",
- srcs = ["event-loop_param_test.cc"],
- hdrs = ["event-loop_param_test.h"],
- deps = [
- "event-loop",
- "//aos/testing:googletest",
- ],
- testonly = True,
+ name = "event-loop_param_test",
+ testonly = True,
+ srcs = ["event-loop_param_test.cc"],
+ hdrs = ["event-loop_param_test.h"],
+ deps = [
+ "event-loop",
+ "//aos/testing:googletest",
+ ],
)
cc_test(
- name = "simulated-event-loop_test",
- srcs = ["simulated-event-loop_test.cc"],
- deps = [
- "//aos/testing:googletest",
- ":event-loop_param_test",
- ":simulated-event-loop",
- ],
- testonly = True,
+ name = "simulated-event-loop_test",
+ testonly = True,
+ srcs = ["simulated-event-loop_test.cc"],
+ deps = [
+ ":event-loop_param_test",
+ ":simulated-event-loop",
+ "//aos/testing:googletest",
+ ],
)
cc_library(
- name = "simulated-event-loop",
- hdrs = ["simulated-event-loop.h"],
- srcs = ["simulated-event-loop.cc"],
- deps = [
- ":event-loop",
- "//aos:queues",
- ],
+ name = "simulated-event-loop",
+ srcs = ["simulated-event-loop.cc"],
+ hdrs = ["simulated-event-loop.h"],
+ deps = [
+ ":event-loop",
+ "//aos:queues",
+ ],
)
-
diff --git a/aos/events/event-loop.h b/aos/events/event-loop.h
index 57ff49b..0b336c3 100644
--- a/aos/events/event-loop.h
+++ b/aos/events/event-loop.h
@@ -107,6 +107,7 @@
//
// This will watch messages sent to path.
// Note that T needs to match both send and recv side.
+ // TODO(parker): Need to support ::std::bind. For now, use lambdas.
template <typename Watch>
void MakeWatcher(const std::string &path, Watch &&w);
diff --git a/aos/events/shm-event-loop.cc b/aos/events/shm-event-loop.cc
index 6231df2..b05aa84 100644
--- a/aos/events/shm-event-loop.cc
+++ b/aos/events/shm-event-loop.cc
@@ -218,6 +218,8 @@
void ShmEventLoop::Run() {
set_is_running(true);
for (const auto &run : on_run_) run();
+ // TODO(austin): epoll event loop in main thread (if needed), and async safe
+ // quit handler.
thread_state_->Run();
}