1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
--- src/cpu.cpp.orig 2021-07-08 06:23:59 UTC
+++ src/cpu.cpp
@@ -227,6 +227,7 @@ bool CPUStats::UpdateCPUData()
bool CPUStats::UpdateCoreMhz() {
m_coreMhz.clear();
+#if defined(__linux__)
std::ifstream cpuInfo(PROCCPUINFOFILE);
std::string row;
size_t i = 0;
@@ -238,6 +239,13 @@ bool CPUStats::UpdateCoreMhz() {
i++;
}
}
+#elif defined(__FreeBSD__)
+ char sysctl_name[32];
+ for (int i = 0; i < m_cpuData.size(); i++) {
+ snprintf(sysctl_name, sizeof(sysctl_name), "dev.cpu.%d.freq", i);
+ m_cpuData[i].mhz = read_sysctl<int>(sysctl_name);
+ }
+#endif
m_cpuDataTotal.cpu_mhz = 0;
for (auto data : m_cpuData)
m_cpuDataTotal.cpu_mhz += data.mhz;
@@ -246,6 +254,7 @@ bool CPUStats::UpdateCoreMhz() {
}
bool CPUStats::UpdateCpuTemp() {
+#if defined(__linux__)
if (!m_cpuTempFile)
return false;
@@ -256,6 +265,23 @@ bool CPUStats::UpdateCpuTemp() {
m_cpuDataTotal.temp = temp / 1000;
return ret;
+#elif defined(__FreeBSD__)
+ char sysctl_name[32];
+ int dK, i, temp;
+ for (temp = i = 0; i < m_cpuData.size(); i++) {
+ snprintf(sysctl_name, sizeof(sysctl_name), "dev.cpu.%d.temperature", i);
+ dK = read_sysctl<int>(sysctl_name);
+ if (dK < 0) {
+ // If we could not read some core's temperature, store
+ // the last read (bogus) value and return false early.
+ m_cpuDataTotal.temp = dK;
+ return false;
+ }
+ temp += dK - 2731;
+ }
+ m_cpuDataTotal.temp = temp / (10 * m_cpuData.size());
+ return m_cpuDataTotal.temp > 0;
+#endif
}
static bool get_cpu_power_k10temp(CPUPowerData* cpuPowerData, int& power) {
@@ -407,6 +433,7 @@ static bool find_fallback_temp_input(const std::string
return false;
}
+#ifdef __linux__
bool CPUStats::GetCpuFile() {
if (m_cpuTempFile)
return true;
@@ -447,6 +474,7 @@ bool CPUStats::GetCpuFile() {
}
return true;
}
+#endif
static bool find_input(const std::string& path, const char* input_prefix, std::string& input, const std::string& name)
{
|