Some cpu/gpu stats parsing fixes

pull/20/head
jackun 4 years ago
parent 6400ab3cdc
commit 217b65f0e9
No known key found for this signature in database
GPG Key ID: 119DB3F1D05A9ED3

@ -7,6 +7,7 @@
#include <string.h> #include <string.h>
#include <algorithm> #include <algorithm>
#include <regex> #include <regex>
#include "string_utils.h"
#ifndef PROCDIR #ifndef PROCDIR
#define PROCDIR "/proc" #define PROCDIR "/proc"
@ -24,10 +25,6 @@
#define PROCCPUINFOFILE PROCDIR "/cpuinfo" #define PROCCPUINFOFILE PROCDIR "/cpuinfo"
#endif #endif
static bool starts_with(const std::string& s, const char *t){
return s.rfind(t, 0) == 0;
}
void calculateCPUData(CPUData& cpuData, void calculateCPUData(CPUData& cpuData,
unsigned long long int usertime, unsigned long long int usertime,
unsigned long long int nicetime, unsigned long long int nicetime,
@ -204,15 +201,14 @@ bool CPUStats::UpdateCPUData()
bool CPUStats::UpdateCoreMhz() { bool CPUStats::UpdateCoreMhz() {
m_coreMhz.clear(); m_coreMhz.clear();
std::ifstream cpuInfo(PROCCPUINFOFILE); std::ifstream cpuInfo(PROCCPUINFOFILE);
std::string row; std::string row;
int i = 0; size_t i = 0;
while (std::getline(cpuInfo, row)) { while (std::getline(cpuInfo, row) && i < m_cpuData.size()) {
CPUData& cpuData = m_cpuData[i]; if (row.find("MHz") != std::string::npos){
if (row.find("MHz") != std::string::npos){ row = std::regex_replace(row, std::regex(R"([^0-9.])"), "");
row = std::regex_replace(row, std::regex(R"([^0-9.])"), ""); if (!try_stoi(m_cpuData[i++].mhz, row))
cpuData.mhz = stoi(row); m_cpuData[i++].mhz = 0;
i++; }
}
} }
return true; return true;
} }

@ -18,13 +18,10 @@
using namespace std; using namespace std;
int gpuLoad, gpuTemp, cpuTemp; int gpuLoad, gpuTemp, cpuTemp;
string gpuLoadDisplay, cpuTempLocation; FILE *amdGpuFile = nullptr, *amdTempFile = nullptr, *cpuTempFile = nullptr;
FILE *amdGpuFile, *amdTempFile, *cpuTempFile;
int numCpuCores = std::thread::hardware_concurrency(); int numCpuCores = std::thread::hardware_concurrency();
size_t arraySize = numCpuCores + 1;
// std::vector<Cpus> cpuArray;
pthread_t cpuThread, gpuThread, cpuInfoThread, nvidiaSmiThread; pthread_t cpuThread, gpuThread, cpuInfoThread, nvidiaSmiThread;
string exec(string command) { string exec(string command) {
@ -51,44 +48,42 @@ string exec(string command) {
void *cpuInfo(void *){ void *cpuInfo(void *){
char buff[6]; rewind(cpuTempFile);
rewind(cpuTempFile);
fflush(cpuTempFile); fflush(cpuTempFile);
fscanf(cpuTempFile, "%s", buff); if (fscanf(cpuTempFile, "%d", &cpuTemp) != 1)
cpuTemp = stoi(buff) / 1000; cpuTemp = 0;
pthread_detach(cpuInfoThread); cpuTemp /= 1000;
pthread_detach(cpuInfoThread);
return NULL;
return NULL;
} }
void *getNvidiaGpuInfo(void *){ void *getNvidiaGpuInfo(void *){
if (!nvmlSuccess) if (!nvmlSuccess)
checkNvidia(); checkNvidia();
if (nvmlSuccess){ if (nvmlSuccess){
getNvidiaInfo(); getNvidiaInfo();
gpuLoad = nvidiaUtilization.gpu; gpuLoad = nvidiaUtilization.gpu;
gpuLoadDisplay = gpuLoad; gpuTemp = nvidiaTemp;
gpuTemp = nvidiaTemp; }
}
pthread_detach(nvidiaSmiThread);
pthread_detach(nvidiaSmiThread); return NULL;
return NULL;
} }
void *getAmdGpuUsage(void *){ void *getAmdGpuUsage(void *){
char buff[5]; rewind(amdGpuFile);
rewind(amdGpuFile);
fflush(amdGpuFile); fflush(amdGpuFile);
fscanf(amdGpuFile, "%s", buff); if (fscanf(amdGpuFile, "%d", &gpuLoad) != 1)
gpuLoadDisplay = buff; gpuLoad = 0;
gpuLoad = stoi(buff);
rewind(amdTempFile);
rewind(amdTempFile);
fflush(amdTempFile); fflush(amdTempFile);
fscanf(amdTempFile, "%s", buff); if (fscanf(amdTempFile, "%d", &gpuTemp) != 1)
gpuTemp = (stoi(buff) / 1000); gpuTemp = 0;
gpuTemp /= 1000;
pthread_detach(gpuThread); pthread_detach(gpuThread);
return NULL; return NULL;
} }

Loading…
Cancel
Save