| OLD | NEW |
| 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2008 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 // The basis for all native run loops on the Mac is the CFRunLoop. It can be | 5 // The basis for all native run loops on the Mac is the CFRunLoop. It can be |
| 6 // used directly, it can be used as the driving force behind the similar | 6 // used directly, it can be used as the driving force behind the similar |
| 7 // Foundation NSRunLoop, and it can be used to implement higher-level event | 7 // Foundation NSRunLoop, and it can be used to implement higher-level event |
| 8 // loops such as the NSApplication event loop. | 8 // loops such as the NSApplication event loop. |
| 9 // | 9 // |
| 10 // This file introduces a basic CFRunLoop-based implementation of the | 10 // This file introduces a basic CFRunLoop-based implementation of the |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 // MessagePumpMac::Create is defined, which returns a new NSApplication-based | 26 // MessagePumpMac::Create is defined, which returns a new NSApplication-based |
| 27 // or NSRunLoop-based MessagePump subclass depending on which thread it is | 27 // or NSRunLoop-based MessagePump subclass depending on which thread it is |
| 28 // called on. | 28 // called on. |
| 29 | 29 |
| 30 #ifndef BASE_MESSAGE_PUMP_MAC_H_ | 30 #ifndef BASE_MESSAGE_PUMP_MAC_H_ |
| 31 #define BASE_MESSAGE_PUMP_MAC_H_ | 31 #define BASE_MESSAGE_PUMP_MAC_H_ |
| 32 | 32 |
| 33 #include "base/message_pump.h" | 33 #include "base/message_pump.h" |
| 34 | 34 |
| 35 #include <CoreFoundation/CoreFoundation.h> | 35 #include <CoreFoundation/CoreFoundation.h> |
| 36 #include <IOKit/IOKitLib.h> |
| 36 | 37 |
| 37 namespace base { | 38 namespace base { |
| 38 | 39 |
| 39 class Time; | 40 class Time; |
| 40 | 41 |
| 41 class MessagePumpCFRunLoopBase : public MessagePump { | 42 class MessagePumpCFRunLoopBase : public MessagePump { |
| 42 public: | 43 public: |
| 43 MessagePumpCFRunLoopBase(); | 44 MessagePumpCFRunLoopBase(); |
| 44 virtual ~MessagePumpCFRunLoopBase(); | 45 virtual ~MessagePumpCFRunLoopBase(); |
| 45 | 46 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 // beginning and end of calls to CFRunLoopRun. This is used to maintain | 118 // beginning and end of calls to CFRunLoopRun. This is used to maintain |
| 118 // nesting_level_. Associated with enter_exit_observer_. | 119 // nesting_level_. Associated with enter_exit_observer_. |
| 119 static void EnterExitObserver(CFRunLoopObserverRef observer, | 120 static void EnterExitObserver(CFRunLoopObserverRef observer, |
| 120 CFRunLoopActivity activity, void* info); | 121 CFRunLoopActivity activity, void* info); |
| 121 | 122 |
| 122 // Called by EnterExitObserver after performing maintenance on nesting_level_. | 123 // Called by EnterExitObserver after performing maintenance on nesting_level_. |
| 123 // This allows subclasses an opportunity to perform additional processing on | 124 // This allows subclasses an opportunity to perform additional processing on |
| 124 // the basis of run loops starting and stopping. | 125 // the basis of run loops starting and stopping. |
| 125 virtual void EnterExitRunLoop(CFRunLoopActivity activity); | 126 virtual void EnterExitRunLoop(CFRunLoopActivity activity); |
| 126 | 127 |
| 128 // IOKit power state change notification callback, called when the system |
| 129 // enters and leaves the sleep state. |
| 130 static void PowerStateNotification(void* info, io_service_t service, |
| 131 uint32_t message_type, |
| 132 void* message_argument); |
| 133 |
| 127 // The thread's run loop. | 134 // The thread's run loop. |
| 128 CFRunLoopRef run_loop_; | 135 CFRunLoopRef run_loop_; |
| 129 | 136 |
| 130 // The timer, sources, and observers are described above alongside their | 137 // The timer, sources, and observers are described above alongside their |
| 131 // callbacks. | 138 // callbacks. |
| 132 CFRunLoopTimerRef delayed_work_timer_; | 139 CFRunLoopTimerRef delayed_work_timer_; |
| 133 CFRunLoopSourceRef work_source_; | 140 CFRunLoopSourceRef work_source_; |
| 134 CFRunLoopSourceRef delayed_work_source_; | 141 CFRunLoopSourceRef delayed_work_source_; |
| 135 CFRunLoopSourceRef idle_work_source_; | 142 CFRunLoopSourceRef idle_work_source_; |
| 136 CFRunLoopSourceRef nesting_deferred_work_source_; | 143 CFRunLoopSourceRef nesting_deferred_work_source_; |
| 137 CFRunLoopObserverRef pre_wait_observer_; | 144 CFRunLoopObserverRef pre_wait_observer_; |
| 138 CFRunLoopObserverRef pre_source_observer_; | 145 CFRunLoopObserverRef pre_source_observer_; |
| 139 CFRunLoopObserverRef enter_exit_observer_; | 146 CFRunLoopObserverRef enter_exit_observer_; |
| 140 | 147 |
| 148 // Objects used for power state notification. See PowerStateNotification. |
| 149 io_connect_t root_power_domain_; |
| 150 IONotificationPortRef power_notification_port_; |
| 151 io_object_t power_notification_object_; |
| 152 |
| 141 // (weak) Delegate passed as an argument to the innermost Run call. | 153 // (weak) Delegate passed as an argument to the innermost Run call. |
| 142 Delegate* delegate_; | 154 Delegate* delegate_; |
| 143 | 155 |
| 156 // The time that delayed_work_timer_ is scheduled to fire. This is tracked |
| 157 // independently of CFRunLoopTimerGetNextFireDate(delayed_work_timer_) |
| 158 // to be able to reset the timer properly after waking from system sleep. |
| 159 // See PowerStateNotification. |
| 160 CFAbsoluteTime delayed_work_fire_time_; |
| 161 |
| 144 // The recursion depth of the currently-executing CFRunLoopRun loop on the | 162 // The recursion depth of the currently-executing CFRunLoopRun loop on the |
| 145 // run loop's thread. 0 if no run loops are running inside of whatever scope | 163 // run loop's thread. 0 if no run loops are running inside of whatever scope |
| 146 // the object was created in. | 164 // the object was created in. |
| 147 int nesting_level_; | 165 int nesting_level_; |
| 148 | 166 |
| 149 // The recursion depth (calculated in the same way as nesting_level_) of the | 167 // The recursion depth (calculated in the same way as nesting_level_) of the |
| 150 // innermost executing CFRunLoopRun loop started by a call to Run. | 168 // innermost executing CFRunLoopRun loop started by a call to Run. |
| 151 int run_nesting_level_; | 169 int run_nesting_level_; |
| 152 | 170 |
| 153 // The deepest (numerically highest) recursion depth encountered since the | 171 // The deepest (numerically highest) recursion depth encountered since the |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 // thread. Otherwise, returns a new instance of MessagePumpNSRunLoop. | 248 // thread. Otherwise, returns a new instance of MessagePumpNSRunLoop. |
| 231 static MessagePump* Create(); | 249 static MessagePump* Create(); |
| 232 | 250 |
| 233 private: | 251 private: |
| 234 DISALLOW_IMPLICIT_CONSTRUCTORS(MessagePumpMac); | 252 DISALLOW_IMPLICIT_CONSTRUCTORS(MessagePumpMac); |
| 235 }; | 253 }; |
| 236 | 254 |
| 237 } // namespace base | 255 } // namespace base |
| 238 | 256 |
| 239 #endif // BASE_MESSAGE_PUMP_MAC_H_ | 257 #endif // BASE_MESSAGE_PUMP_MAC_H_ |
| OLD | NEW |