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

Side by Side Diff: base/time/time_win.cc

Issue 1910063003: More accurate implementation of watched thread time for Gpu Watchdog. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 5
6 // Windows Timer Primer 6 // Windows Timer Primer
7 // 7 //
8 // A good article: http://www.ddj.com/windows/184416651 8 // A good article: http://www.ddj.com/windows/184416651
9 // A good mozilla bug: http://bugzilla.mozilla.org/show_bug.cgi?id=363258 9 // A good mozilla bug: http://bugzilla.mozilla.org/show_bug.cgi?id=363258
10 // 10 //
(...skipping 24 matching lines...) Expand all
35 35
36 #include <windows.h> 36 #include <windows.h>
37 #include <mmsystem.h> 37 #include <mmsystem.h>
38 #include <stdint.h> 38 #include <stdint.h>
39 39
40 #include "base/bit_cast.h" 40 #include "base/bit_cast.h"
41 #include "base/cpu.h" 41 #include "base/cpu.h"
42 #include "base/lazy_instance.h" 42 #include "base/lazy_instance.h"
43 #include "base/logging.h" 43 #include "base/logging.h"
44 #include "base/synchronization/lock.h" 44 #include "base/synchronization/lock.h"
45 #include "base/threading/platform_thread.h"
45 46
46 using base::ThreadTicks; 47 using base::ThreadTicks;
47 using base::Time; 48 using base::Time;
48 using base::TimeDelta; 49 using base::TimeDelta;
49 using base::TimeTicks; 50 using base::TimeTicks;
50 51
51 namespace { 52 namespace {
52 53
53 // From MSDN, FILETIME "Contains a 64-bit value representing the number of 54 // From MSDN, FILETIME "Contains a 64-bit value representing the number of
54 // 100-nanosecond intervals since January 1, 1601 (UTC)." 55 // 100-nanosecond intervals since January 1, 1601 (UTC)."
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 } 512 }
512 513
513 // static 514 // static
514 TimeTicks::Clock TimeTicks::GetClock() { 515 TimeTicks::Clock TimeTicks::GetClock() {
515 return IsHighResolution() ? 516 return IsHighResolution() ?
516 Clock::WIN_QPC : Clock::WIN_ROLLOVER_PROTECTED_TIME_GET_TIME; 517 Clock::WIN_QPC : Clock::WIN_ROLLOVER_PROTECTED_TIME_GET_TIME;
517 } 518 }
518 519
519 // static 520 // static
520 ThreadTicks ThreadTicks::Now() { 521 ThreadTicks ThreadTicks::Now() {
522 return ThreadTicks::Now(PlatformThread::CurrentHandle());
523 }
524
525 // static
526 ThreadTicks ThreadTicks::Now(const base::PlatformThreadHandle& thread_handle) {
521 DCHECK(IsSupported()); 527 DCHECK(IsSupported());
522 528
523 // Get the number of TSC ticks used by the current thread. 529 // Get the number of TSC ticks used by the current thread.
524 ULONG64 thread_cycle_time = 0; 530 ULONG64 thread_cycle_time = 0;
525 GetQueryThreadCycleTimeFunction()(::GetCurrentThread(), &thread_cycle_time); 531 GetQueryThreadCycleTimeFunction()(thread_handle.platform_handle(),
fdoray 2016/04/21 21:08:37 We can call ::QueryThreadCycleTime() directly and
stanisc 2016/04/22 01:11:45 OK, I've removed GetQueryThreadCycleTimeFunction()
532 &thread_cycle_time);
526 533
527 // Get the frequency of the TSC. 534 // Get the frequency of the TSC.
528 double tsc_ticks_per_second = TSCTicksPerSecond(); 535 double tsc_ticks_per_second = TSCTicksPerSecond();
529 if (tsc_ticks_per_second == 0) 536 if (tsc_ticks_per_second == 0)
530 return ThreadTicks(); 537 return ThreadTicks();
531 538
532 // Return the CPU time of the current thread. 539 // Return the CPU time of the current thread.
533 double thread_time_seconds = thread_cycle_time / tsc_ticks_per_second; 540 double thread_time_seconds = thread_cycle_time / tsc_ticks_per_second;
534 return ThreadTicks( 541 return ThreadTicks(
535 static_cast<int64_t>(thread_time_seconds * Time::kMicrosecondsPerSecond)); 542 static_cast<int64_t>(thread_time_seconds * Time::kMicrosecondsPerSecond));
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 TimeTicks TimeTicks::FromQPCValue(LONGLONG qpc_value) { 619 TimeTicks TimeTicks::FromQPCValue(LONGLONG qpc_value) {
613 return TimeTicks() + QPCValueToTimeDelta(qpc_value); 620 return TimeTicks() + QPCValueToTimeDelta(qpc_value);
614 } 621 }
615 622
616 // TimeDelta ------------------------------------------------------------------ 623 // TimeDelta ------------------------------------------------------------------
617 624
618 // static 625 // static
619 TimeDelta TimeDelta::FromQPCValue(LONGLONG qpc_value) { 626 TimeDelta TimeDelta::FromQPCValue(LONGLONG qpc_value) {
620 return QPCValueToTimeDelta(qpc_value); 627 return QPCValueToTimeDelta(qpc_value);
621 } 628 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698