Add RT scheduler tracking
This interacts with event loops nicely, both in simulation and in the
real system. This gives us tools to enforce that certain pieces of code
are run in a RT world, and others are not.
Future work will be to enforce that Malloc is not called while realtime.
Change-Id: I3ce3dc287e25390095bac34aed4888434a82f06e
diff --git a/aos/realtime_test.cc b/aos/realtime_test.cc
new file mode 100644
index 0000000..e77f140
--- /dev/null
+++ b/aos/realtime_test.cc
@@ -0,0 +1,76 @@
+#include "aos/realtime.h"
+
+#include "gtest/gtest.h"
+
+namespace aos {
+namespace testing {
+
+// Tests that ScopedRealtime handles the simple case.
+TEST(RealtimeTest, ScopedRealtime) {
+ CheckNotRealtime();
+ {
+ ScopedRealtime rt;
+ CheckRealtime();
+ }
+ CheckNotRealtime();
+}
+
+// Tests that ScopedRealtime handles nesting.
+TEST(RealtimeTest, DoubleScopedRealtime) {
+ CheckNotRealtime();
+ {
+ ScopedRealtime rt;
+ CheckRealtime();
+ {
+ ScopedRealtime rt2;
+ CheckRealtime();
+ }
+ CheckRealtime();
+ }
+ CheckNotRealtime();
+}
+
+// Tests that ScopedRealtime handles nesting with ScopedNotRealtime.
+TEST(RealtimeTest, ScopedNotRealtime) {
+ CheckNotRealtime();
+ {
+ ScopedRealtime rt;
+ CheckRealtime();
+ {
+ ScopedNotRealtime nrt;
+ CheckNotRealtime();
+ }
+ CheckRealtime();
+ }
+ CheckNotRealtime();
+}
+
+// Tests that ScopedRealtimeRestorer works both when starting RT and nonrt.
+TEST(RealtimeTest, ScopedRealtimeRestorer) {
+ CheckNotRealtime();
+ {
+ ScopedRealtime rt;
+ CheckRealtime();
+ {
+ ScopedRealtimeRestorer restore;
+ CheckRealtime();
+
+ MarkRealtime(false);
+ CheckNotRealtime();
+ }
+ CheckRealtime();
+ }
+ CheckNotRealtime();
+
+ {
+ ScopedRealtimeRestorer restore;
+ CheckNotRealtime();
+
+ MarkRealtime(true);
+ CheckRealtime();
+ }
+ CheckNotRealtime();
+}
+
+} // namespace testing
+} // namespace aos