| // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef TRACELINE_RDTSC_H_ |
| #define TRACELINE_RDTSC_H_ |
| |
| #include <windows.h> |
| #include <powrprof.h> |
| |
| #include <map> |
| |
| #include "logging.h" |
| |
| class RDTSCNormalizer { |
| public: |
| RDTSCNormalizer() { } |
| ~RDTSCNormalizer() { } |
| |
| void Start() { |
| LARGE_INTEGER freq, now; |
| if (QueryPerformanceFrequency(&freq) == 0) { |
| NOTREACHED(""); |
| } |
| freq_ = freq.QuadPart; |
| |
| if (QueryPerformanceCounter(&now) == 0) { |
| NOTREACHED(""); |
| } |
| start_ = now.QuadPart; |
| } |
| |
| // Calculate the time from start for a given processor. |
| double MsFromStart(void* procid, __int64 stamp) { |
| return (stamp - start_) / (freq_ / 1000.0); |
| } |
| |
| private: |
| __int64 freq_; |
| __int64 start_; |
| }; |
| |
| #endif // TRACELINE_RDTSC_H_ |