#include "debug.h"
#include "options.h"
+#include "timer.h"
#include "workqueue.h"
#include "workqueue-internal.h"
gold_debug(DEBUG_TASK, "%3d running task %s", thread_number,
t->name().c_str());
+ Timer timer;
+ if (is_debugging_enabled(DEBUG_TASK))
+ timer.start();
+
t->run(this);
- gold_debug(DEBUG_TASK, "%3d completed task %s", thread_number,
- t->name().c_str());
+ if (is_debugging_enabled(DEBUG_TASK))
+ {
+ Timer::TimeStats elapsed = timer.get_elapsed_time();
+
+ gold_debug(DEBUG_TASK,
+ "%3d completed task %s "
+ "(user: %ld.%06ld sys: %ld.%06ld wall: %ld.%06ld)",
+ thread_number, t->name().c_str(),
+ elapsed.user / 1000, (elapsed.user % 1000) * 1000,
+ elapsed.sys / 1000, (elapsed.sys % 1000) * 1000,
+ elapsed.wall / 1000, (elapsed.wall % 1000) * 1000);
+ }
Task* next;
{
this->condvar_.broadcast();
}
+// Add a new blocker to an existing Task_token.
+
+void
+Workqueue::add_blocker(Task_token* token)
+{
+ Hold_lock hl(this->lock_);
+ token->add_blocker();
+}
+
} // End namespace gold.