Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Side by Side Diff: base/message_pump_mac.mm

Issue 3884001: Switch to using TimeTicks rather than Time in message loops (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/message_pump_mac.h ('k') | base/message_pump_win.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "base/message_pump_mac.h" 5 #include "base/message_pump_mac.h"
6 6
7 #import <AppKit/AppKit.h> 7 #import <AppKit/AppKit.h>
8 #import <Foundation/Foundation.h> 8 #import <Foundation/Foundation.h>
9 #include <IOKit/IOMessage.h> 9 #include <IOKit/IOMessage.h>
10 #include <IOKit/pwr_mgt/IOPMLib.h> 10 #include <IOKit/pwr_mgt/IOPMLib.h>
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 218 }
219 219
220 // May be called on any thread. 220 // May be called on any thread.
221 void MessagePumpCFRunLoopBase::ScheduleWork() { 221 void MessagePumpCFRunLoopBase::ScheduleWork() {
222 CFRunLoopSourceSignal(work_source_); 222 CFRunLoopSourceSignal(work_source_);
223 CFRunLoopWakeUp(run_loop_); 223 CFRunLoopWakeUp(run_loop_);
224 } 224 }
225 225
226 // Must be called on the run loop thread. 226 // Must be called on the run loop thread.
227 void MessagePumpCFRunLoopBase::ScheduleDelayedWork( 227 void MessagePumpCFRunLoopBase::ScheduleDelayedWork(
228 const Time& delayed_work_time) { 228 const TimeTicks& delayed_work_time) {
229 // TODO(jar): We may need a more efficient way to go between these times, but
230 // the difference will change not only when we sleep/wake, it will also change
231 // when the user changes the wall clock time :-/.
232 Time absolute_work_time =
233 (delayed_work_time - TimeTicks::Now()) + Time::Now();
234
229 Time::Exploded exploded; 235 Time::Exploded exploded;
230 delayed_work_time.UTCExplode(&exploded); 236 absolute_work_time.UTCExplode(&exploded);
231 double seconds = exploded.second + 237 double seconds = exploded.second +
232 (static_cast<double>((delayed_work_time.ToInternalValue()) % 238 (static_cast<double>((absolute_work_time.ToInternalValue()) %
233 Time::kMicrosecondsPerSecond) / 239 Time::kMicrosecondsPerSecond) /
234 Time::kMicrosecondsPerSecond); 240 Time::kMicrosecondsPerSecond);
235 CFGregorianDate gregorian = { 241 CFGregorianDate gregorian = {
236 exploded.year, 242 exploded.year,
237 exploded.month, 243 exploded.month,
238 exploded.day_of_month, 244 exploded.day_of_month,
239 exploded.hour, 245 exploded.hour,
240 exploded.minute, 246 exploded.minute,
241 seconds 247 seconds
242 }; 248 };
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 return false; 319 return false;
314 } 320 }
315 321
316 // The NSApplication-based run loop only drains the autorelease pool at each 322 // The NSApplication-based run loop only drains the autorelease pool at each
317 // UI event (NSEvent). The autorelease pool is not drained for each 323 // UI event (NSEvent). The autorelease pool is not drained for each
318 // CFRunLoopSource target that's run. Use a local pool for any autoreleased 324 // CFRunLoopSource target that's run. Use a local pool for any autoreleased
319 // objects if the app is not currently handling a UI event to ensure they're 325 // objects if the app is not currently handling a UI event to ensure they're
320 // released promptly even in the absence of UI events. 326 // released promptly even in the absence of UI events.
321 MessagePumpScopedAutoreleasePool autorelease_pool(this); 327 MessagePumpScopedAutoreleasePool autorelease_pool(this);
322 328
323 Time next_time; 329 TimeTicks next_time;
324 delegate_->DoDelayedWork(&next_time); 330 delegate_->DoDelayedWork(&next_time);
325 331
326 bool more_work = !next_time.is_null(); 332 bool more_work = !next_time.is_null();
327 if (more_work) { 333 if (more_work) {
328 TimeDelta delay = next_time - Time::Now(); 334 TimeDelta delay = next_time - TimeTicks::Now();
329 if (delay > TimeDelta()) { 335 if (delay > TimeDelta()) {
330 // There's more delayed work to be done in the future. 336 // There's more delayed work to be done in the future.
331 ScheduleDelayedWork(next_time); 337 ScheduleDelayedWork(next_time);
332 } else { 338 } else {
333 // There's more delayed work to be done, and its time is in the past. 339 // There's more delayed work to be done, and its time is in the past.
334 // Arrange to come back here directly as long as the loop is still 340 // Arrange to come back here directly as long as the loop is still
335 // running. 341 // running.
336 CFRunLoopSourceSignal(delayed_work_source_); 342 CFRunLoopSourceSignal(delayed_work_source_);
337 } 343 }
338 } 344 }
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 // static 763 // static
758 MessagePump* MessagePumpMac::Create() { 764 MessagePump* MessagePumpMac::Create() {
759 if ([NSThread isMainThread]) { 765 if ([NSThread isMainThread]) {
760 return new MessagePumpNSApplication; 766 return new MessagePumpNSApplication;
761 } 767 }
762 768
763 return new MessagePumpNSRunLoop; 769 return new MessagePumpNSRunLoop;
764 } 770 }
765 771
766 } // namespace base 772 } // namespace base
OLDNEW
« no previous file with comments | « base/message_pump_mac.h ('k') | base/message_pump_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698