diff options
author | jar@google.com <jar@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-01 21:55:17 +0000 |
---|---|---|
committer | jar@google.com <jar@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-01 21:55:17 +0000 |
commit | ee73678e5a629620179e30dbea0db263d07c38a1 (patch) | |
tree | 180bf57d36bdb33c6ce4f724f750e9d4064ceaa8 /base/message_loop.cc | |
parent | 1f9431546f1bafcbe8d5e0127ab8861413487174 (diff) | |
download | chromium_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.cc | 10 |
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 |