Home | History | Annotate | Download | only in traceline
      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