File indexing completed on 2024-05-12 17:00:15
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QObject> 0010 #include <QProcess> 0011 #include <memory> 0012 0013 class NvidiaSmiProcess : public QObject 0014 { 0015 Q_OBJECT 0016 0017 public: 0018 struct GpuData { 0019 int index = -1; 0020 uint power = 0; 0021 uint temperature = 0; 0022 uint usage = 0; 0023 uint memoryUsed = 0; 0024 uint coreFrequency = 0; 0025 uint memoryFrequency = 0; 0026 }; 0027 0028 struct GpuQueryResult { 0029 QString pciPath; 0030 QString name; 0031 uint totalMemory = 0; 0032 uint maxCoreFrequency = 0; 0033 uint maxMemoryFrequency = 0; 0034 uint maxTemperature = 0; 0035 uint maxPower = 0; 0036 }; 0037 0038 NvidiaSmiProcess(); 0039 0040 bool isSupported() const; 0041 0042 std::vector<GpuQueryResult> query(); 0043 0044 void ref(); 0045 void unref(); 0046 0047 Q_SIGNAL void dataReceived(const GpuData &data); 0048 0049 private: 0050 void readStatisticsData(); 0051 0052 struct dmonIndices { 0053 int gpu = -1; 0054 int gtemp = -1; 0055 int power = -1; 0056 int sm = -1; 0057 int enc = -1; 0058 int dec = -1; 0059 int fb = -1; 0060 int bar1 = -1; 0061 int mclk = -1; 0062 int pclk = -1; 0063 }; 0064 0065 QString m_smiPath; 0066 std::vector<GpuQueryResult> m_queryResult; 0067 std::unique_ptr<QProcess> m_process = nullptr; 0068 int m_references = 0; 0069 dmonIndices m_dmonIndices; 0070 };