about summary refs log tree commit diff
path: root/src/rt/rust_dom.cpp
diff options
context:
space:
mode:
authorMichael Bebenita <mbebenita@mozilla.com>2010-07-28 14:53:08 -0700
committerGraydon Hoare <graydon@mozilla.com>2010-07-28 20:30:29 -0700
commit30b3f8a11713e32fdb0d0059141289152a46d501 (patch)
treeabf0d4a9299e494db4993fca0ec75c63fad7d052 /src/rt/rust_dom.cpp
parent5db5eb0c55ff303db96390a4bf6a5365382cc357 (diff)
Add rust_dom::log_state, for logging the running/blocked/dead vectors per scheduling iteration.
Diffstat (limited to 'src/rt/rust_dom.cpp')
-rw-r--r--src/rt/rust_dom.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/rt/rust_dom.cpp b/src/rt/rust_dom.cpp
index 7392833ddb8..17cb1498b93 100644
--- a/src/rt/rust_dom.cpp
+++ b/src/rt/rust_dom.cpp
@@ -282,6 +282,32 @@ rust_dom::schedule_task()
     return NULL;
 }
 
+void
+rust_dom::log_state() {
+    if (!running_tasks.is_empty()) {
+        log(rust_log::TASK, "running tasks:");
+        for (size_t i = 0; i < running_tasks.length(); i++) {
+            log(rust_log::TASK,
+                "\t task: 0x%" PRIxPTR, running_tasks[i]);
+        }
+    }
+
+    if (!blocked_tasks.is_empty()) {
+        log(rust_log::TASK, "blocked tasks:");
+        for (size_t i = 0; i < blocked_tasks.length(); i++) {
+            log(rust_log::TASK,
+                "\t task: 0x%" PRIxPTR ", blocked on: 0x%" PRIxPTR,
+                blocked_tasks[i], blocked_tasks[i]->cond);
+        }
+    }
+
+    if (!dead_tasks.is_empty()) {
+        log(rust_log::TASK, "dead tasks:");
+        for (size_t i = 0; i < dead_tasks.length(); i++) {
+            log(rust_log::TASK, "\t task: 0x%" PRIxPTR, dead_tasks[i]);
+        }
+    }
+}
 /**
  * Starts the main scheduler loop which performs task scheduling for this
  * domain.
@@ -307,7 +333,11 @@ rust_dom::start_main_loop()
         if (scheduled_task == NULL) {
             log(rust_log::TASK,
                 "all tasks are blocked, waiting for progress ...");
+            if (_log.is_tracing(rust_log::TASK))
+                log_state();
             _progress.wait();
+            log(rust_log::TASK,
+                "progress made, resuming ...");
             continue;
         }