summaryrefslogtreecommitdiffstats
path: root/base/message_loop.cc
diff options
context:
space:
mode:
authorjar@google.com <jar@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-01 21:55:17 +0000
committerjar@google.com <jar@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-01 21:55:17 +0000
commitee73678e5a629620179e30dbea0db263d07c38a1 (patch)
tree180bf57d36bdb33c6ce4f724f750e9d4064ceaa8 /base/message_loop.cc
parent1f9431546f1bafcbe8d5e0127ab8861413487174 (diff)
downloadchromium_src-ee73678e5a629620179e30dbea0db263d07c38a1.zip
chromium_src-ee73678e5a629620179e30dbea0db263d07c38a1.tar.gz
chromium_src-ee73678e5a629620179e30dbea0db263d07c38a1.tar.bz2
A new (private) interface is supplied that allows the object watcher (coding in
proress by Darin) to Post the task (when the object is signaled) into a message loop. I also cleaned up the time-of-birth for tasks that sleep for a while before running (such as those held by the timer, or by passed to this new PostSignaledTask() interface. r=darin M base/tracked.cc M base/message_loop.h M base/message_loop.cc M base/tracked.h git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_loop.cc')
-rw-r--r--base/message_loop.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/base/message_loop.cc b/base/message_loop.cc
index 1fa1b29..84b6a04 100644
--- a/base/message_loop.cc
+++ b/base/message_loop.cc
@@ -342,6 +342,15 @@ void MessageLoop::PostDelayedTask(const tracked_objects::Location& from_here,
PostTaskInternal(task);
}
+void MessageLoop::PostSignaledTask(Task* task) {
+ DCHECK(!task->MissingBirthplace());
+ task->ResetBirthTime();
+ DCHECK(!task->is_owned_by_message_loop());
+ task->set_posted_task_delay(0); // Run ASAP, and we take ownership.
+ DCHECK(task->is_owned_by_message_loop());
+ PostTaskInternal(task);
+}
+
void MessageLoop::PostTaskInternal(Task* task) {
// Warning: Don't try to short-circuit, and handle this thread's tasks more
// directly, as it could starve handling of foreign threads. Put every task
@@ -648,6 +657,7 @@ bool MessageLoop::RunTimerTask(Timer* timer) {
DCHECK(!timer->repeating());
timer->set_task(NULL);
delete timer;
+ task->ResetBirthTime();
return QueueOrRunTask(task);
} else {
// This is an unknown timer task, and we *can't* delay running it, as a