12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Copyright 2016 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 TOOLS_WIN_IDLEWAKEUPS_POWER_SAMPLER_H_
- #define TOOLS_WIN_IDLEWAKEUPS_POWER_SAMPLER_H_
- #include <map>
- #include <string>
- #include <windows.h>
- // https://software.intel.com/en-us/blogs/2012/12/13/using-the-intel-power-gadget-api-on-mac-os-x
- typedef int (*IntelEnergyLibInitialize_t)();
- typedef int (*GetNumMsrs_t)(int* nMsr);
- typedef int (*GetMsrName_t)(int iMsr, wchar_t* szName);
- typedef int (*GetMsrFunc_t)(int iMsr, int* pFuncID);
- typedef int (*GetPowerData_t)(int iNode,
- int iMsr,
- double* pResult,
- int* nResult);
- typedef int (*ReadSample_t)();
- class PowerSampler {
- public:
- PowerSampler();
- ~PowerSampler();
- void SampleCPUPowerState();
- double get_power(std::wstring key) { return power_[key]; }
- private:
- // Power consumed in mWh since the last sample.
- std::map<std::wstring, double> power_;
- HMODULE energy_lib_ = nullptr;
- IntelEnergyLibInitialize_t IntelEnergyLibInitialize = nullptr;
- GetNumMsrs_t GetNumMsrs = nullptr;
- GetMsrName_t GetMsrName = nullptr;
- GetMsrFunc_t GetMsrFunc = nullptr;
- GetPowerData_t GetPowerData = nullptr;
- ReadSample_t ReadSample = nullptr;
- PowerSampler& operator=(const PowerSampler&) = delete;
- PowerSampler(const PowerSampler&) = delete;
- };
- #endif // TOOLS_WIN_IDLEWAKEUPS_POWER_SAMPLER_H_
|