Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_pump_libevent.h" | 5 #include "base/message_pump_libevent.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <fcntl.h> | 8 #include <fcntl.h> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 219 // Instead, make our own timer and reuse it on each call to event_base_loop(). | 219 // Instead, make our own timer and reuse it on each call to event_base_loop(). |
| 220 scoped_ptr<event> timer_event(new event); | 220 scoped_ptr<event> timer_event(new event); |
| 221 | 221 |
| 222 for (;;) { | 222 for (;;) { |
| 223 mac::ScopedNSAutoreleasePool autorelease_pool; | 223 mac::ScopedNSAutoreleasePool autorelease_pool; |
| 224 | 224 |
| 225 bool did_work = delegate->DoWork(); | 225 bool did_work = delegate->DoWork(); |
| 226 if (!keep_running_) | 226 if (!keep_running_) |
| 227 break; | 227 break; |
| 228 | 228 |
| 229 int rv = event_base_loop(event_base_, EVLOOP_NONBLOCK); | |
| 230 did_work |= (rv == 2); | |
| 231 | |
| 229 did_work |= delegate->DoDelayedWork(&delayed_work_time_); | 232 did_work |= delegate->DoDelayedWork(&delayed_work_time_); |
| 230 if (!keep_running_) | 233 if (!keep_running_) |
| 231 break; | 234 break; |
| 232 | 235 |
| 233 if (did_work) | 236 if (did_work) |
| 234 continue; | 237 continue; |
| 235 | 238 |
| 236 did_work = delegate->DoIdleWork(); | 239 did_work = delegate->DoIdleWork(); |
| 237 if (!keep_running_) | 240 if (!keep_running_) |
| 238 break; | 241 break; |
| 239 | 242 |
| 240 if (did_work) | 243 if (did_work) |
| 241 continue; | 244 continue; |
| 242 | 245 |
| 243 // EVLOOP_ONCE tells libevent to only block once, | 246 // EVLOOP_ONCE tells libevent to only block once, |
| 244 // but to service all pending events when it wakes up. | 247 // but to service all pending events when it wakes up. |
| 245 if (delayed_work_time_.is_null()) { | 248 if (delayed_work_time_.is_null()) { |
| 246 event_base_loop(event_base_, EVLOOP_ONCE); | 249 event_base_loop(event_base_, EVLOOP_ONCE); |
|
wtc
2011/06/25 00:39:45
The original code calls event_base_loop here and o
| |
| 247 } else { | 250 } else { |
| 248 TimeDelta delay = delayed_work_time_ - TimeTicks::Now(); | 251 TimeDelta delay = delayed_work_time_ - TimeTicks::Now(); |
| 249 if (delay > TimeDelta()) { | 252 if (delay > TimeDelta()) { |
| 250 struct timeval poll_tv; | 253 struct timeval poll_tv; |
| 251 poll_tv.tv_sec = delay.InSeconds(); | 254 poll_tv.tv_sec = delay.InSeconds(); |
| 252 poll_tv.tv_usec = delay.InMicroseconds() % Time::kMicrosecondsPerSecond; | 255 poll_tv.tv_usec = delay.InMicroseconds() % Time::kMicrosecondsPerSecond; |
| 253 event_set(timer_event.get(), -1, 0, timer_callback, event_base_); | 256 event_set(timer_event.get(), -1, 0, timer_callback, event_base_); |
| 254 event_base_set(event_base_, timer_event.get()); | 257 event_base_set(event_base_, timer_event.get()); |
| 255 event_add(timer_event.get(), &poll_tv); | 258 event_add(timer_event.get(), &poll_tv); |
| 256 event_base_loop(event_base_, EVLOOP_ONCE); | 259 event_base_loop(event_base_, EVLOOP_ONCE); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 349 | 352 |
| 350 // Remove and discard the wakeup byte. | 353 // Remove and discard the wakeup byte. |
| 351 char buf; | 354 char buf; |
| 352 int nread = HANDLE_EINTR(read(socket, &buf, 1)); | 355 int nread = HANDLE_EINTR(read(socket, &buf, 1)); |
| 353 DCHECK_EQ(nread, 1); | 356 DCHECK_EQ(nread, 1); |
| 354 // Tell libevent to break out of inner loop. | 357 // Tell libevent to break out of inner loop. |
| 355 event_base_loopbreak(that->event_base_); | 358 event_base_loopbreak(that->event_base_); |
| 356 } | 359 } |
| 357 | 360 |
| 358 } // namespace base | 361 } // namespace base |
| OLD | NEW |