1 // Copyright (c) 2009 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 #ifndef TRACELINE_RDTSC_H_ 6 #define TRACELINE_RDTSC_H_ 7 8 #include <windows.h> 9 #include <powrprof.h> 10 11 #include <map> 12 13 #include "logging.h" 14 15 class RDTSCNormalizer { 16 public: 17 RDTSCNormalizer() { } 18 ~RDTSCNormalizer() { } 19 20 void Start() { 21 LARGE_INTEGER freq, now; 22 if (QueryPerformanceFrequency(&freq) == 0) { 23 NOTREACHED(""); 24 } 25 freq_ = freq.QuadPart; 26 27 if (QueryPerformanceCounter(&now) == 0) { 28 NOTREACHED(""); 29 } 30 start_ = now.QuadPart; 31 } 32 33 // Calculate the time from start for a given processor. 34 double MsFromStart(void* procid, __int64 stamp) { 35 return (stamp - start_) / (freq_ / 1000.0); 36 } 37 38 private: 39 __int64 freq_; 40 __int64 start_; 41 }; 42 43 #endif // TRACELINE_RDTSC_H_ 44