From a3fb14c0d6b512b9460f44a35b0131dfc54df89b Mon Sep 17 00:00:00 2001 From: FlightlessMango Date: Thu, 30 Jan 2020 10:52:24 +0100 Subject: [PATCH] Check nvmlInit() once --- src/cpu_gpu.h | 31 ++++++++++--------------------- src/nvidia_info.h | 5 +++++ src/nvml.c | 12 ++++++++---- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/cpu_gpu.h b/src/cpu_gpu.h index 07278d9f..eb23660f 100644 --- a/src/cpu_gpu.h +++ b/src/cpu_gpu.h @@ -190,28 +190,17 @@ void *cpuInfo(void *){ return NULL; } -// void *queryNvidiaSmi(void *){ -// vector smiArray; -// string nvidiaSmi = exec("nvidia-smi --query-gpu=utilization.gpu,temperature.gpu --format=csv,noheader | tr -d ' ' | head -n1 | tr -d '%'"); -// istringstream f(nvidiaSmi); -// string s; -// while (getline(f, s, ',')) { -// smiArray.push_back(s); -// } -// gpuLoadDisplay = smiArray[0]; -// gpuLoad = stoi(smiArray[0]); -// gpuTemp = stoi(smiArray[1]); - -// pthread_detach(nvidiaSmiThread); -// return NULL; -// } - void *getNvidiaGpuInfo(void *){ - checkNvidia(); - gpuLoad = nvidiaUtilization.gpu; - gpuLoadDisplay = gpuLoad; - gpuTemp = nvidiaTemp; - + if (!nvmlSuccess) + checkNvidia(); + + if (nvmlSuccess){ + getNvidiaInfo(); + gpuLoad = nvidiaUtilization.gpu; + gpuLoadDisplay = gpuLoad; + gpuTemp = nvidiaTemp; + } + pthread_detach(nvidiaSmiThread); return NULL; } diff --git a/src/nvidia_info.h b/src/nvidia_info.h index e57bebb9..e80ec766 100644 --- a/src/nvidia_info.h +++ b/src/nvidia_info.h @@ -1,8 +1,13 @@ +#include +#include #include + nvmlReturn_t result; unsigned int nvidiaTemp, processSamplesCount, lastSeenTimeStamp, *vgpuInstanceSamplesCount; nvmlValueType_t *sampleValType; nvmlDevice_t nvidiaDevice; struct nvmlUtilization_st nvidiaUtilization; +bool nvmlSuccess; void checkNvidia(void); +void getNvidiaInfo(void); \ No newline at end of file diff --git a/src/nvml.c b/src/nvml.c index 6ac6316f..dedf3eec 100644 --- a/src/nvml.c +++ b/src/nvml.c @@ -4,10 +4,14 @@ void checkNvidia(){ result = nvmlInit(); if (NVML_SUCCESS != result) { - + printf("MANGOHUD: Nvidia module not loaded\n"); } else { - nvmlDeviceGetHandleByIndex(0, &nvidiaDevice); - nvmlDeviceGetUtilizationRates(nvidiaDevice, &nvidiaUtilization); - nvmlDeviceGetTemperature(nvidiaDevice, NVML_TEMPERATURE_GPU, &nvidiaTemp); + nvmlSuccess = true; } } + +void getNvidiaInfo(){ + nvmlDeviceGetHandleByIndex(0, &nvidiaDevice); + nvmlDeviceGetUtilizationRates(nvidiaDevice, &nvidiaUtilization); + nvmlDeviceGetTemperature(nvidiaDevice, NVML_TEMPERATURE_GPU, &nvidiaTemp); +} \ No newline at end of file