Skip to content

Commit 9f5046d

Browse files
committed
CPU/GPU (Linux): Improves CPU/GPU temp detection accuracy on Linux/Android
1 parent cace1a7 commit 9f5046d

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

src/detection/cpu/cpu_linux.c

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,53 @@
1515

1616
static double parseTZDir(int dfd, FFstrbuf* buffer)
1717
{
18-
if(!ffReadFileBufferRelative(dfd, "temp", buffer))
18+
if (!ffReadFileBufferRelative(dfd, "type", buffer))
1919
return FF_CPU_TEMP_UNSET;
2020

21-
double value = ffStrbufToDouble(buffer, FF_CPU_TEMP_UNSET);// millidegree Celsius
22-
if(value == FF_CPU_TEMP_UNSET)
21+
if (!ffStrbufStartsWithS(buffer, "cpu") &&
22+
!ffStrbufStartsWithS(buffer, "soc") &&
23+
#if __x86_64__ || __i386__
24+
!ffStrbufEqualS(buffer, "x86_pkg_temp") &&
25+
#endif
26+
true
27+
) return FF_CPU_TEMP_UNSET;
28+
29+
if (!ffReadFileBufferRelative(dfd, "temp", buffer))
2330
return FF_CPU_TEMP_UNSET;
2431

25-
if (!ffReadFileBufferRelative(dfd, "type", buffer) || ffStrbufStartsWithS(buffer, "cpu"))
32+
double value = ffStrbufToDouble(buffer, FF_CPU_TEMP_UNSET);// millidegree Celsius
33+
if (value == FF_CPU_TEMP_UNSET)
2634
return FF_CPU_TEMP_UNSET;
2735

2836
return value / 1000.;
2937
}
3038

3139
static double parseHwmonDir(int dfd, FFstrbuf* buffer)
3240
{
33-
//https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface
34-
if(!ffReadFileBufferRelative(dfd, "temp1_input", buffer))
35-
return FF_CPU_TEMP_UNSET;
36-
37-
double value = ffStrbufToDouble(buffer, FF_CPU_TEMP_UNSET);// millidegree Celsius
38-
if(value == FF_CPU_TEMP_UNSET)
39-
return FF_CPU_TEMP_UNSET;
40-
41-
if (!ffReadFileBufferRelative(dfd, "temp1_label", buffer))
41+
if (!ffReadFileBufferRelative(dfd, "name", buffer))
4242
return FF_CPU_TEMP_UNSET;
4343

4444
ffStrbufTrimRightSpace(buffer);
4545

46-
if(
47-
ffStrbufContainS(buffer, "cpu") ||
46+
if (
47+
!ffStrbufContainS(buffer, "cpu") &&
4848
#if __x86_64__ || __i386__
49-
ffStrbufEqualS(buffer, "k10temp") || // AMD
50-
ffStrbufEqualS(buffer, "fam15h_power") || // AMD
51-
ffStrbufEqualS(buffer, "coretemp") || // Intel
49+
!ffStrbufEqualS(buffer, "k10temp") && // AMD
50+
!ffStrbufEqualS(buffer, "fam15h_power") && // AMD
51+
!ffStrbufEqualS(buffer, "coretemp") && // Intel
5252
#endif
53-
false
54-
) return value / 1000.;
53+
true
54+
) return FF_CPU_TEMP_UNSET;
5555

56-
return FF_CPU_TEMP_UNSET;
56+
//https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface
57+
if (!ffReadFileBufferRelative(dfd, "temp1_input", buffer))
58+
return FF_CPU_TEMP_UNSET;
59+
60+
double value = ffStrbufToDouble(buffer, FF_CPU_TEMP_UNSET);// millidegree Celsius
61+
if (value == FF_CPU_TEMP_UNSET)
62+
return FF_CPU_TEMP_UNSET;
63+
64+
return value / 1000.;
5765
}
5866

5967
static double detectCPUTemp(void)

src/detection/gpu/gpu_android.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66

77
static double parseTZDir(int dfd, FFstrbuf* buffer)
88
{
9-
if(!ffReadFileBufferRelative(dfd, "temp", buffer))
9+
if (!ffReadFileBufferRelative(dfd, "type", buffer) || !ffStrbufStartsWithS(buffer, "gpu"))
1010
return FF_GPU_TEMP_UNSET;
1111

12-
double value = ffStrbufToDouble(buffer, FF_GPU_TEMP_UNSET);// millidegree Celsius
13-
if(value == FF_GPU_TEMP_UNSET)
12+
if (!ffReadFileBufferRelative(dfd, "temp", buffer))
1413
return FF_GPU_TEMP_UNSET;
1514

16-
if (!ffReadFileBufferRelative(dfd, "type", buffer) || ffStrbufStartsWithS(buffer, "gpu"))
15+
double value = ffStrbufToDouble(buffer, FF_GPU_TEMP_UNSET);// millidegree Celsius
16+
if (value == FF_GPU_TEMP_UNSET)
1717
return FF_GPU_TEMP_UNSET;
1818

1919
return value / 1000.;

0 commit comments

Comments
 (0)