23#include <kstandarddirs.h>
29GPUSensor::GPUSensor(TQString gpuDriver, TQString gpuId,
int interval)
30 : Sensor(interval), m_gpuDriver(gpuDriver), m_gpuId(gpuId)
32 if (m_gpuDriver.lower() ==
"nvidia")
34 TQString nvsmi = TDEStandardDirs::findExe(
"nvidia-smi");
37 kdError() <<
"The NVidia System Management Interface software is not avaiable." << endl;
41 m_command << nvsmi <<
"--query-gpu" <<
"utilization.gpu"
42 <<
"--format=csv,noheader";
44 if (!m_gpuId.isNull())
46 m_command << TQString(
"--id=%1").arg(m_gpuId);
52 kdError() <<
"Unsupported driver specified for GPU sensor (" << m_gpuDriver <<
");" << endl
53 <<
"\tSupported drivers are: nvidia" << endl;
56 connect(&m_proc, TQ_SIGNAL(receivedStdout(TDEProcess*,
char*,
int)),
57 this, TQ_SLOT(receivedStdout(TDEProcess*,
char*,
int)));
58 connect(&m_proc, TQ_SIGNAL(processExited(TDEProcess*)),
59 this, TQ_SLOT(processExited(TDEProcess*)));
62GPUSensor::~GPUSensor()
66void GPUSensor::update()
68 if (m_command.isEmpty())
return;
70 m_proc.clearArguments();
73 m_proc.start(TDEProcess::NotifyOnExit, TDEProcess::Stdout);
76void GPUSensor::receivedStdout(TDEProcess *proc,
char *buffer,
int buflen)
79 m_buffer += TQCString(buffer);
82TQString GPUSensor::getLoad()
84 if (m_gpuDriver.lower() ==
"nvidia")
86 return m_buffer.left(m_buffer.length() - 3);
89 return TQString::null;
92#define SUB_FORMAT_STR(fstring, value) \
93 format.replace(TQRegExp(#fstring, false), value)
94void GPUSensor::processExited(TDEProcess *proc)
99 TQString load = getLoad();
100 m_buffer = TQString::null;
102 TQObjectListIt it(*objList);
106 meter = sp->getMeter();
107 format = sp->getParam(
"FORMAT");
109 if( format.length() == 0)
114 SUB_FORMAT_STR(%load, load);
115 SUB_FORMAT_STR(%v, load);
117 meter->setValue(format);
126 sp->getMeter()->setMax(100);
129#include "gpusensor.moc"