model: set thread state during 'swap' calls
[c11tester.git] / schedule.cc
index 9f692728aa916d820d3d9c38d80f8c591aee9396..915bbc90fb3daa8d5985decdf9e1641a93e59993 100644 (file)
@@ -7,6 +7,32 @@
 #include "model.h"
 #include "nodestack.h"
 
+/**
+ * Format an "enabled_type_t" for printing
+ * @param e The type to format
+ * @param str The output character array
+ */
+static void enabled_type_to_string(enabled_type_t e, char *str)
+{
+       const char *res;
+       switch (e) {
+       case THREAD_DISABLED:
+               res = "disabled";
+               break;
+       case THREAD_ENABLED:
+               res = "enabled";
+               break;
+       case THREAD_SLEEP_SET:
+               res = "sleep";
+               break;
+       default:
+               ASSERT(0);
+               res = NULL;
+               break;
+       }
+       strcpy(str, res);
+}
+
 /** Constructor */
 Scheduler::Scheduler() :
        enabled(NULL),
@@ -168,6 +194,7 @@ Thread * Scheduler::next_thread(Thread *t)
                for (int i = 0; i < enabled_len; i++) {
                        thread_id_t tid = int_to_id(i);
                        if (n->has_priority(tid)) {
+                               DEBUG("Node (tid %d) has priority\n", i);
                                //Have a thread with priority
                                if (enabled[i] != THREAD_DISABLED)
                                        have_enabled_thread_with_priority = true;
@@ -183,7 +210,8 @@ Thread * Scheduler::next_thread(Thread *t)
                                break;
                        }
                        if (curr_thread_index == old_curr_thread) {
-                               print();
+                               if (DBG_ENABLED())
+                                       print();
                                return NULL;
                        }
                }
@@ -195,7 +223,8 @@ Thread * Scheduler::next_thread(Thread *t)
        }
 
        current = t;
-       print();
+       if (DBG_ENABLED())
+               print();
        return t;
 }
 
@@ -214,8 +243,13 @@ Thread * Scheduler::get_current_thread() const
  */
 void Scheduler::print() const
 {
-       if (current)
-               DEBUG("Current thread: %d\n", id_to_int(current->get_id()));
-       else
-               DEBUG("No current thread\n");
+       int curr_id = current ? id_to_int(current->get_id()) : -1;
+
+       model_print("Scheduler: ");
+       for (int i = 0; i < enabled_len; i++) {
+               char str[20];
+               enabled_type_to_string(enabled[i], str);
+               model_print("[%i: %s%s]", i, i == curr_id ? "current, " : "", str);
+       }
+       model_print("\n");
 }