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 |