OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2013 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 #include "base/logging.h" | |
6 #include "content/browser/power_profiler/Intel/power_profiler_helper_ia.h" | |
7 | |
8 namespace content { | |
9 | |
10 void PowerProfilerHelperIA::Reset(size_t resolution) { | |
11 } | |
12 | |
13 int PowerProfilerHelperIA::GetData(PowerEvent* data, double* energies, | |
qsr
2014/01/17 11:50:14
How is this working? You do not have any informati
| |
14 int count) { | |
15 if (!is_open_ || count < PowerEvent::ID_COUNT) | |
16 return -1; | |
17 | |
18 int read_number = 0; | |
19 energy_lib_.ReadSample(); | |
20 | |
21 base::Time time = base::Time::Now(); | |
22 | |
23 // get SoC package power | |
24 double package_power = 0.0; | |
25 double package_energy = 0.0; | |
26 double power[3]; | |
27 int nData; | |
28 for (int i = 0; i < sockets_number_; i++) { | |
29 if (power_msr_ids_[PowerEvent::SOC_PACKAGE] == -1) | |
30 break; | |
31 | |
32 bool code = energy_lib_.GetPowerData(i, | |
33 power_msr_ids_[PowerEvent::SOC_PACKAGE], power, &nData); | |
34 package_power += power[0]; | |
35 package_energy += power[1]; | |
36 } | |
37 | |
38 data[read_number].type = PowerEvent::SOC_PACKAGE; | |
39 data[read_number].value = package_power; | |
40 data[read_number].time = base::TimeTicks::Now(); | |
41 ++read_number; | |
42 | |
43 energies[PowerEvent::SOC_PACKAGE] = package_energy; | |
44 | |
45 return read_number; | |
46 } | |
47 | |
48 bool PowerProfilerHelperIA::Initialize() { | |
49 if (is_open_) | |
50 return true; | |
51 | |
52 if (!energy_lib_.IntelEnergyLibInitialize()) { | |
53 LOG(ERROR) << "Power profiler helper initialize failed!\r\n"; | |
54 return false; | |
55 } | |
56 energy_lib_.GetNumNodes(&sockets_number_); | |
57 | |
58 const std::wstring package_msr_name_ = L"Processor"; | |
59 const std::wstring cpu_msr_name_ = L"IA"; | |
60 | |
61 int msr_number; | |
62 energy_lib_.GetNumMsrs(&msr_number); | |
63 | |
64 int funcID; | |
65 wchar_t szName[32]; | |
66 for(int i = 0; i < msr_number; i++) { | |
67 energy_lib_.GetMsrFunc(i, &funcID); | |
68 energy_lib_.GetMsrName(i, szName); | |
69 | |
70 if (funcID != 1) | |
71 continue; | |
72 | |
73 if (package_msr_name_.compare(szName) == 0) | |
74 power_msr_ids_[PowerEvent::SOC_PACKAGE] = i; | |
75 else if (cpu_msr_name_.compare(szName) == 0) | |
76 power_msr_ids_[PowerEvent::CPU] = i; | |
77 } | |
78 | |
79 is_open_ = true; | |
80 return true; | |
81 } | |
82 | |
83 } // namespace base | |
OLD | NEW |