LCOV - code coverage report
Current view: directory - ipc/chromium/src/base - message_pump_default.cc (source / functions) Found Hit Coverage
Test: app.info Lines: 37 3 8.1 %
Date: 2012-06-02 Functions: 5 1 20.0 %

       1                 : // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
       2                 : // Use of this source code is governed by a BSD-style license that can be
       3                 : // found in the LICENSE file.
       4                 : 
       5                 : #include "base/message_pump_default.h"
       6                 : 
       7                 : #include "base/logging.h"
       8                 : #include "base/scoped_nsautorelease_pool.h"
       9                 : 
      10                 : namespace base {
      11                 : 
      12            1420 : MessagePumpDefault::MessagePumpDefault()
      13                 :     : keep_running_(true),
      14            1420 :       event_(false, false) {
      15            1420 : }
      16                 : 
      17               0 : void MessagePumpDefault::Run(Delegate* delegate) {
      18               0 :   DCHECK(keep_running_) << "Quit must have been called outside of Run!";
      19                 : 
      20               0 :   for (;;) {
      21               0 :     ScopedNSAutoreleasePool autorelease_pool;
      22                 : 
      23               0 :     bool did_work = delegate->DoWork();
      24               0 :     if (!keep_running_)
      25               0 :       break;
      26                 : 
      27               0 :     did_work |= delegate->DoDelayedWork(&delayed_work_time_);
      28               0 :     if (!keep_running_)
      29               0 :       break;
      30                 : 
      31               0 :     if (did_work)
      32               0 :       continue;
      33                 : 
      34               0 :     did_work = delegate->DoIdleWork();
      35               0 :     if (!keep_running_)
      36               0 :       break;
      37                 : 
      38               0 :     if (did_work)
      39               0 :       continue;
      40                 : 
      41               0 :     if (delayed_work_time_.is_null()) {
      42               0 :       event_.Wait();
      43                 :     } else {
      44               0 :       TimeDelta delay = delayed_work_time_ - Time::Now();
      45               0 :       if (delay > TimeDelta()) {
      46               0 :         event_.TimedWait(delay);
      47                 :       } else {
      48                 :         // It looks like delayed_work_time_ indicates a time in the past, so we
      49                 :         // need to call DoDelayedWork now.
      50               0 :         delayed_work_time_ = Time();
      51                 :       }
      52                 :     }
      53                 :     // Since event_ is auto-reset, we don't need to do anything special here
      54                 :     // other than service each delegate method.
      55                 :   }
      56                 : 
      57               0 :   keep_running_ = true;
      58               0 : }
      59                 : 
      60               0 : void MessagePumpDefault::Quit() {
      61               0 :   keep_running_ = false;
      62               0 : }
      63                 : 
      64               0 : void MessagePumpDefault::ScheduleWork() {
      65                 :   // Since this can be called on any thread, we need to ensure that our Run
      66                 :   // loop wakes up.
      67               0 :   event_.Signal();
      68               0 : }
      69                 : 
      70               0 : void MessagePumpDefault::ScheduleDelayedWork(const Time& delayed_work_time) {
      71                 :   // We know that we can't be blocked on Wait right now since this method can
      72                 :   // only be called on the same thread as Run, so we only need to update our
      73                 :   // record of how long to sleep when we do sleep.
      74               0 :   delayed_work_time_ = delayed_work_time;
      75               0 : }
      76                 : 
      77                 : }  // namespace base

Generated by: LCOV version 1.7