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

Side by Side Diff: base/message_loop.cc

Issue 2822035: Change chrome from statically enabling high resolution timers on windows... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 months 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_loop.h ('k') | base/message_loop_unittest.cc » ('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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_loop.h" 5 #include "base/message_loop.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 void MessageLoop::PostTask_Helper( 275 void MessageLoop::PostTask_Helper(
276 const tracked_objects::Location& from_here, Task* task, int64 delay_ms, 276 const tracked_objects::Location& from_here, Task* task, int64 delay_ms,
277 bool nestable) { 277 bool nestable) {
278 task->SetBirthPlace(from_here); 278 task->SetBirthPlace(from_here);
279 279
280 PendingTask pending_task(task, nestable); 280 PendingTask pending_task(task, nestable);
281 281
282 if (delay_ms > 0) { 282 if (delay_ms > 0) {
283 pending_task.delayed_run_time = 283 pending_task.delayed_run_time =
284 Time::Now() + TimeDelta::FromMilliseconds(delay_ms); 284 Time::Now() + TimeDelta::FromMilliseconds(delay_ms);
285
286 #if defined(OS_WIN)
287 if (high_resolution_timer_expiration_.is_null()) {
288 // Windows timers are granular to 15.6ms. If we only set high-res
289 // timers for those under 15.6ms, then a 18ms timer ticks at ~32ms,
290 // which as a percentage is pretty inaccurate. So enable high
291 // res timers for any timer which is within 2x of the granularity.
292 // This is a tradeoff between accuracy and power management.
293 bool needs_high_res_timers =
294 delay_ms < (2 * Time::kMinLowResolutionThresholdMs);
295 if (needs_high_res_timers) {
296 Time::ActivateHighResolutionTimer(true);
297 high_resolution_timer_expiration_ = base::TimeTicks::Now() +
298 TimeDelta::FromMilliseconds(kHighResolutionTimerModeLeaseTimeMs);
299 }
300 }
301 #endif
285 } else { 302 } else {
286 DCHECK_EQ(delay_ms, 0) << "delay should not be negative"; 303 DCHECK_EQ(delay_ms, 0) << "delay should not be negative";
287 } 304 }
288 305
306 #if defined(OS_WIN)
307 if (!high_resolution_timer_expiration_.is_null()) {
308 if (base::TimeTicks::Now() > high_resolution_timer_expiration_) {
309 Time::ActivateHighResolutionTimer(false);
310 high_resolution_timer_expiration_ = base::TimeTicks();
311 }
312 }
313 #endif
314
289 // Warning: Don't try to short-circuit, and handle this thread's tasks more 315 // Warning: Don't try to short-circuit, and handle this thread's tasks more
290 // directly, as it could starve handling of foreign threads. Put every task 316 // directly, as it could starve handling of foreign threads. Put every task
291 // into this queue. 317 // into this queue.
292 318
293 scoped_refptr<base::MessagePump> pump; 319 scoped_refptr<base::MessagePump> pump;
294 { 320 {
295 AutoLock locked(incoming_queue_lock_); 321 AutoLock locked(incoming_queue_lock_);
296 322
297 bool was_empty = incoming_queue_.empty(); 323 bool was_empty = incoming_queue_.empty();
298 incoming_queue_.push(pending_task); 324 incoming_queue_.push(pending_task);
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 Watcher *delegate) { 670 Watcher *delegate) {
645 return pump_libevent()->WatchFileDescriptor( 671 return pump_libevent()->WatchFileDescriptor(
646 fd, 672 fd,
647 persistent, 673 persistent,
648 static_cast<base::MessagePumpLibevent::Mode>(mode), 674 static_cast<base::MessagePumpLibevent::Mode>(mode),
649 controller, 675 controller,
650 delegate); 676 delegate);
651 } 677 }
652 678
653 #endif 679 #endif
OLDNEW
« no previous file with comments | « base/message_loop.h ('k') | base/message_loop_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698