Only detect temps if --allow-slow-operations is given

This commit is contained in:
Linus Dierheimer
2022-09-24 15:59:36 +02:00
parent 0250d11d97
commit f5ac85c4e3
7 changed files with 36 additions and 50 deletions
+2 -2
View File
@@ -4,7 +4,7 @@
#define FF_CPU_CACHE_NAME "cpu"
void ffDetectCPUImpl(FFCPUResult* cpu, bool cached);
void ffDetectCPUImpl(const FFinstance* instance, FFCPUResult* cpu, bool cached);
static bool cacheCallback(FFCPUResult* cpu, FFCache* cache, FFCacheMethodStrbuf strbufMethod, FFCacheMethodData dataMethod)
{
@@ -25,7 +25,7 @@ static void detectCPU(const FFinstance* instance, FFCPUResult* cpu)
bool cached = ffCacheRead(instance, cpu, FF_CPU_CACHE_NAME, (FFCacheMethodCallback) cacheCallback);
ffDetectCPUImpl(cpu, cached);
ffDetectCPUImpl(instance, cpu, cached);
if(cached)
return;
+4 -1
View File
@@ -12,10 +12,13 @@ static double getFrequency(const char* propName)
return herz / 1000.0; //to GHz
}
void ffDetectCPUImpl(FFCPUResult* cpu, bool cached)
void ffDetectCPUImpl(const FFinstance* instance, FFCPUResult* cpu, bool cached)
{
FF_UNUSED(instance);
//TODO find a way to detect this
cpu->temperature = FF_CPU_TEMP_UNSET;
if(cached)
return;
+4 -1
View File
@@ -1,9 +1,12 @@
#include "cpu.h"
#include "common/sysctl.h"
void ffDetectCPUImpl(FFCPUResult* cpu, bool cached)
void ffDetectCPUImpl(const FFinstance* instance, FFCPUResult* cpu, bool cached)
{
FF_UNUSED(instance);
cpu->temperature = FF_CPU_TEMP_UNSET;
if(cached)
return;
+5 -4
View File
@@ -60,9 +60,9 @@ static double getFrequency(const char* info, const char* scaling)
return getGHz(scaling);
}
static double detectCPUTemp()
static double detectCPUTemp(const FFinstance* instance)
{
const FFTempsResult* temps = ffDetectTemps();
const FFTempsResult* temps = ffDetectTemps(instance);
for(uint32_t i = 0; i < temps->values.length; i++)
{
@@ -78,9 +78,10 @@ static double detectCPUTemp()
return FF_CPU_TEMP_UNSET;
}
void ffDetectCPUImpl(FFCPUResult* cpu, bool cached)
void ffDetectCPUImpl(const FFinstance* instance, FFCPUResult* cpu, bool cached)
{
cpu->temperature = detectCPUTemp();
cpu->temperature = detectCPUTemp(instance);
if(cached)
return;
+5 -5
View File
@@ -150,9 +150,9 @@ static void pciDetectDriverName(FFGPUResult* gpu, PCIData* pci, struct pci_dev*
ffStrbufDestroy(&path);
}
static void pciDetectTemperatur(FFGPUResult* gpu, struct pci_dev* device)
static void pciDetectTemperatur(const FFinstance* instance, FFGPUResult* gpu, struct pci_dev* device)
{
const FFTempsResult* tempsResult = ffDetectTemps();
const FFTempsResult* tempsResult = ffDetectTemps(instance);
for(uint32_t i = 0; i < tempsResult->values.length; i++)
{
@@ -171,7 +171,7 @@ static void pciDetectTemperatur(FFGPUResult* gpu, struct pci_dev* device)
}
}
static void pciHandleDevice(FFlist* results, PCIData* pci, struct pci_dev* device)
static void pciHandleDevice(const FFinstance* instance, FFlist* results, PCIData* pci, struct pci_dev* device)
{
pci->ffpci_fill_info(device, PCI_FILL_CLASS);
@@ -200,7 +200,7 @@ static void pciHandleDevice(FFlist* results, PCIData* pci, struct pci_dev* devic
gpu->coreCount = FF_GPU_CORE_COUNT_UNSET;
gpu->temperature = FF_GPU_TEMP_UNSET;
pciDetectTemperatur(gpu, device);
pciDetectTemperatur(instance, gpu, device);
}
static const char* pciDetectGPUs(const FFinstance* instance, FFlist* gpus)
@@ -229,7 +229,7 @@ static const char* pciDetectGPUs(const FFinstance* instance, FFlist* gpus)
struct pci_dev* device = pci.access->devices;
while(device != NULL)
{
pciHandleDevice(gpus, &pci, device);
pciHandleDevice(instance, gpus, &pci, device);
device = device->next;
}
+15 -36
View File
@@ -6,48 +6,20 @@
#include <pthread.h>
#include <dirent.h>
static bool isTempFile(const char* name)
{
return
strncmp(name, "temp", 4) == 0 &&
name[4] >= '0' &&
name[4] <= '9' &&
strncmp(name + 5, "_input", 6) == 0;
}
static bool parseHwmonDir(FFstrbuf* dir, FFTempValue* value)
{
DIR* dirp = opendir(dir->chars);
if(dirp == NULL)
return false;
uint32_t dirLength = dir->length;
value->value = 0.0 / 0.0; //use NaN as error value
FFstrbuf valueString;
ffStrbufInit(&valueString);
FFstrbuf valueBuffer;
ffStrbufInit(&valueBuffer);
struct dirent* dirent;
while((dirent = readdir(dirp)) != NULL)
{
if(!isTempFile(dirent->d_name))
continue;
ffStrbufAppendS(dir, "temp1_input");
ffReadFileBuffer(dir->chars, &valueBuffer);
ffStrbufSubstrBefore(dir, dirLength);
ffStrbufAppendS(dir, dirent->d_name);
ffReadFileBuffer(dir->chars, &valueString);
ffStrbufSubstrBefore(dir, dirLength);
value->value = ffStrbufToDouble(&valueBuffer);
//ffStrbufToDouble() returns NaN if the string couldn't be parsed
value->value = ffStrbufToDouble(&valueString);
if(value->value != value->value)
continue;
value->value /= 1000.0; //millidegrees to degrees
break;
}
closedir(dirp);
ffStrbufDestroy(&valueString);
ffStrbufDestroy(&valueBuffer);
if(value->value != value->value)
return false;
@@ -63,7 +35,7 @@ static bool parseHwmonDir(FFstrbuf* dir, FFTempValue* value)
return value->name.length > 0 || value->deviceClass.length > 0;
}
const FFTempsResult* ffDetectTemps()
const FFTempsResult* ffDetectTemps(const FFinstance* instance)
{
static FFTempsResult result;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -77,6 +49,13 @@ const FFTempsResult* ffDetectTemps()
}
init = true;
if(!instance->config.allowSlowOperations)
{
ffListInitA(&result.values, sizeof(FFTempValue), 0);
pthread_mutex_unlock(&mutex);
return &result;
}
ffListInitA(&result.values, sizeof(FFTempValue), 16);
FFstrbuf baseDir;
+1 -1
View File
@@ -17,6 +17,6 @@ typedef struct FFTempsResult
FFlist values; //List of FFTempValue
} FFTempsResult;
const FFTempsResult* ffDetectTemps();
const FFTempsResult* ffDetectTemps(const FFinstance* instance);
#endif