Merge pull request #15804 from samcake/wall

DEV-146, BUGZ-747: Add one call in PlatformInfo::getPlatform() returning the complete description of the platform
This commit is contained in:
Andrew Meadows 2019-06-20 09:07:19 -07:00 committed by GitHub
commit b23badf374
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 211 additions and 112 deletions

View file

@ -192,7 +192,7 @@ QString PlatformInfoScriptingInterface::getDisplay(int index) {
} }
QString PlatformInfoScriptingInterface::getMemory() { QString PlatformInfoScriptingInterface::getMemory() {
auto desc = platform::getMemory(0); auto desc = platform::getMemory();
return QString(desc.dump().c_str()); return QString(desc.dump().c_str());
} }
@ -201,6 +201,10 @@ QString PlatformInfoScriptingInterface::getComputer() {
return QString(desc.dump().c_str()); return QString(desc.dump().c_str());
} }
QString PlatformInfoScriptingInterface::getPlatform() {
auto desc = platform::getAll();
return QString(desc.dump().c_str());
}
PlatformInfoScriptingInterface::PlatformTier PlatformInfoScriptingInterface::getTierProfiled() { PlatformInfoScriptingInterface::PlatformTier PlatformInfoScriptingInterface::getTierProfiled() {
return (PlatformInfoScriptingInterface::PlatformTier) platform::Profiler::profilePlatform(); return (PlatformInfoScriptingInterface::PlatformTier) platform::Profiler::profilePlatform();

View file

@ -51,6 +51,8 @@ public slots:
* Gets the operating system type. * Gets the operating system type.
* @function PlatformInfo.getOperatingSystemType * @function PlatformInfo.getOperatingSystemType
* @returns {string} <code>"WINDOWS"</code>, <code>"MACOS"</code>, or <code>"UNKNOWN"</code>. * @returns {string} <code>"WINDOWS"</code>, <code>"MACOS"</code>, or <code>"UNKNOWN"</code>.
* @deprecated This function is deprecated and will be removed.
* use getComputer()["OS"] instead
*/ */
QString getOperatingSystemType(); QString getOperatingSystemType();
@ -61,6 +63,10 @@ public slots:
* @example <caption>Report the CPU being used.</caption> * @example <caption>Report the CPU being used.</caption>
* print("CPU: " + PlatformInfo.getCPUBrand()); * print("CPU: " + PlatformInfo.getCPUBrand());
* // Example: Intel(R) Core(TM) i7-7820HK CPU @ 2.90GHz * // Example: Intel(R) Core(TM) i7-7820HK CPU @ 2.90GHz
* @deprecated This function is deprecated and will be removed.
* use getNumCPUs() to know the number of CPUs in the hardware, at least one is expected
* use getCPU(0)["vendor"] to get the brand of the vendor
* use getCPU(0)["model"] to get the model name of the cpu
*/ */
QString getCPUBrand(); QString getCPUBrand();
@ -68,6 +74,8 @@ public slots:
* Gets the number of logical CPU cores. * Gets the number of logical CPU cores.
* @function PlatformInfo.getNumLogicalCores * @function PlatformInfo.getNumLogicalCores
* @returns {number} The number of logical CPU cores. * @returns {number} The number of logical CPU cores.
* @deprecated This function is deprecated and will be removed.
* use getCPU(0)["numCores"] instead
*/ */
unsigned int getNumLogicalCores(); unsigned int getNumLogicalCores();
@ -75,6 +83,8 @@ public slots:
* Returns the total system memory in megabytes. * Returns the total system memory in megabytes.
* @function PlatformInfo.getTotalSystemMemoryMB * @function PlatformInfo.getTotalSystemMemoryMB
* @returns {number} The total system memory in megabytes. * @returns {number} The total system memory in megabytes.
* @deprecated This function is deprecated and will be removed.
* use getMemory()["memTotal"] instead
*/ */
int getTotalSystemMemoryMB(); int getTotalSystemMemoryMB();
@ -82,6 +92,10 @@ public slots:
* Gets the graphics card type. * Gets the graphics card type.
* @function PlatformInfo.getGraphicsCardType * @function PlatformInfo.getGraphicsCardType
* @returns {string} The graphics card type. * @returns {string} The graphics card type.
* @deprecated This function is deprecated and will be removed.
* use getNumGPUs() to know the number of GPUs in the hardware, at least one is expected
* use getGPU(0)["vendor"] to get the brand of the vendor
* use getGPU(0)["model"] to get the model name of the gpu
*/ */
QString getGraphicsCardType(); QString getGraphicsCardType();
@ -141,7 +155,7 @@ public slots:
/**jsdoc /**jsdoc
* Get the description of the GPU at the index parameter * Get the description of the GPU at the index parameter
* expected fields are: * expected fields are:
* - gpuVendor... * - vendor, model...
* @param index The index of the GPU of the platform * @param index The index of the GPU of the platform
* @function PlatformInfo.getGPU * @function PlatformInfo.getGPU
* @returns {string} The GPU description json field * @returns {string} The GPU description json field
@ -183,6 +197,14 @@ public slots:
*/ */
QString getComputer(); QString getComputer();
/**jsdoc
* Get the complete description of the Platform as an aggregated Json
* The expected object description is:
* { "computer": {...}, "memory": {...}, "cpus": [{...}, ...], "gpus": [{...}, ...], "displays": [{...}, ...] }
* @function PlatformInfo.getPlatform
* @returns {string} The Platform description json field
*/
QString getPlatform();
/**jsdoc /**jsdoc
* Get the Platform TIer profiled on startup of the Computer * Get the Platform TIer profiled on startup of the Computer

View file

@ -27,12 +27,13 @@ json getGPU(int index);
int getNumDisplays(); int getNumDisplays();
json getDisplay(int index); json getDisplay(int index);
int getNumMemories(); json getMemory();
json getMemory(int index);
json getComputer(); json getComputer();
json getAll();
} // namespace platform } // namespace platform
#endif // hifi_platform_h #endif // hifi_platform_h

View file

@ -9,6 +9,9 @@
#define hifi_platform_PlatformKeys_h #define hifi_platform_PlatformKeys_h
namespace platform { namespace keys{ namespace platform { namespace keys{
// "UNKNOWN"
extern const char* UNKNOWN;
namespace cpu { namespace cpu {
extern const char* vendor; extern const char* vendor;
extern const char* vendor_Intel; extern const char* vendor_Intel;
@ -36,8 +39,9 @@ namespace platform { namespace keys{
extern const char* coordsTop; extern const char* coordsTop;
extern const char* coordsBottom; extern const char* coordsBottom;
} }
namespace memory {
extern const char* memTotal; extern const char* memTotal;
}
namespace computer { namespace computer {
extern const char* OS; extern const char* OS;
extern const char* OS_WINDOWS; extern const char* OS_WINDOWS;
@ -45,6 +49,8 @@ namespace platform { namespace keys{
extern const char* OS_LINUX; extern const char* OS_LINUX;
extern const char* OS_ANDROID; extern const char* OS_ANDROID;
extern const char* OSVersion;
extern const char* vendor; extern const char* vendor;
extern const char* vendor_Apple; extern const char* vendor_Apple;
@ -52,6 +58,14 @@ namespace platform { namespace keys{
extern const char* profileTier; extern const char* profileTier;
} }
} } // namespace plaform::keys
// Keys for categories used in json returned by getAll()
extern const char* CPUS;
extern const char* GPUS;
extern const char* DISPLAYS;
extern const char* MEMORY;
extern const char* COMPUTER;
} } // namespace plaform::keys
#endif #endif

View file

@ -9,39 +9,45 @@
#include "AndroidPlatform.h" #include "AndroidPlatform.h"
#include "../PlatformKeys.h" #include "../PlatformKeys.h"
#include <GPUIdent.h> #include <GPUIdent.h>
#include <QSysInfo>
using namespace platform; using namespace platform;
void AndroidInstance::enumerateCpu() { void AndroidInstance::enumerateCpus() {
json cpu; json cpu;
cpu[keys::cpu::vendor] = ""; cpu[keys::cpu::vendor] = "";
cpu[keys::cpu::model] = ""; cpu[keys::cpu::model] = "";
cpu[keys::cpu::clockSpeed] = ""; cpu[keys::cpu::clockSpeed] = "";
cpu[keys::cpu::numCores] = 0; cpu[keys::cpu::numCores] = 0;
_cpu.push_back(cpu);
_cpus.push_back(cpu);
} }
void AndroidInstance::enumerateGpu() { void AndroidInstance::enumerateGpus() {
GPUIdent* ident = GPUIdent::getInstance(); GPUIdent* ident = GPUIdent::getInstance();
json gpu = {}; json gpu = {};
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
gpu[keys::gpu::model] = ident->getName().toUtf8().constData(); gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
gpu[keys::gpu::videoMemory] = ident->getMemory(); gpu[keys::gpu::videoMemory] = ident->getMemory();
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData(); gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
_gpu.push_back(gpu); _gpus.push_back(gpu);
_display = ident->getOutput(); _displays = ident->getOutput();
} }
void AndroidInstance::enumerateMemory() { void AndroidInstance::enumerateMemory() {
json ram = {}; json ram = {};
ram[keys::memTotal]=0; ram[keys::memory::memTotal]=0;
_memory.push_back(ram); _memory = ram;
} }
void AndroidInstance::enumerateComputer(){ void AndroidInstance::enumerateComputer(){
_computer[keys::computer::OS] = keys::computer::OS_ANDROID; _computer[keys::computer::OS] = keys::computer::OS_ANDROID;
_computer[keys::computer::vendor] = ""; _computer[keys::computer::vendor] = "";
_computer[keys::computer::model] = ""; _computer[keys::computer::model] = "";
auto sysInfo = QSysInfo();
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
} }

View file

@ -15,10 +15,10 @@ namespace platform {
class AndroidInstance : public Instance { class AndroidInstance : public Instance {
public: public:
void enumerateCpu() override; void enumerateCpus() override;
void enumerateGpus() override;
void enumerateMemory() override; void enumerateMemory() override;
void enumerateGpu() override; void enumerateComputer() override;
void enumerateComputer () override;
}; };
} // namespace platform } // namespace platform

View file

@ -13,36 +13,37 @@
#include <string> #include <string>
#include <CPUIdent.h> #include <CPUIdent.h>
#include <GPUIdent.h> #include <GPUIdent.h>
#include <QSysInfo>
using namespace platform; using namespace platform;
void LinuxInstance::enumerateCpu() { void LinuxInstance::enumerateCpus() {
json cpu = {}; json cpu = {};
cpu[keys::cpu::vendor] = CPUIdent::Vendor(); cpu[keys::cpu::vendor] = CPUIdent::Vendor();
cpu[keys::cpu::model] = CPUIdent::Brand(); cpu[keys::cpu::model] = CPUIdent::Brand();
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency(); cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
_cpu.push_back(cpu); _cpus.push_back(cpu);
} }
void LinuxInstance::enumerateGpu() { void LinuxInstance::enumerateGpus() {
GPUIdent* ident = GPUIdent::getInstance(); GPUIdent* ident = GPUIdent::getInstance();
json gpu = {}; json gpu = {};
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
gpu[keys::gpu::model] = ident->getName().toUtf8().constData(); gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
gpu[keys::gpu::videoMemory] = ident->getMemory(); gpu[keys::gpu::videoMemory] = ident->getMemory();
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData(); gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
_gpu.push_back(gpu); _gpus.push_back(gpu);
_display = ident->getOutput(); _displays = ident->getOutput();
} }
void LinuxInstance::enumerateMemory() { void LinuxInstance::enumerateMemory() {
json ram = {}; json ram = {};
ram[keys::memTotal]=0; ram[keys::memory::memTotal]=0;
_memory.push_back(ram); _memory = ram;
} }
void LinuxInstance::enumerateComputer(){ void LinuxInstance::enumerateComputer(){
@ -50,5 +51,9 @@ void LinuxInstance::enumerateComputer(){
_computer[keys::computer::OS] = keys::computer::OS_LINUX; _computer[keys::computer::OS] = keys::computer::OS_LINUX;
_computer[keys::computer::vendor] = ""; _computer[keys::computer::vendor] = "";
_computer[keys::computer::model] = ""; _computer[keys::computer::model] = "";
auto sysInfo = QSysInfo();
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
} }

View file

@ -15,10 +15,10 @@ namespace platform {
class LinuxInstance : public Instance { class LinuxInstance : public Instance {
public: public:
void enumerateCpu() override; void enumerateCpus() override;
void enumerateGpus() override;
void enumerateMemory() override; void enumerateMemory() override;
void enumerateGpu() override; void enumerateComputer() override;
void enumerateComputer () override;
}; };
} // namespace platform } // namespace platform

View file

@ -21,32 +21,33 @@
#include <CoreFoundation/CoreFoundation.h> #include <CoreFoundation/CoreFoundation.h>
#include <ApplicationServices/ApplicationServices.h> #include <ApplicationServices/ApplicationServices.h>
#include <QSysInfo>
#endif #endif
using namespace platform; using namespace platform;
void MACOSInstance::enumerateCpu() { void MACOSInstance::enumerateCpus() {
json cpu = {}; json cpu = {};
cpu[keys::cpu::vendor] = CPUIdent::Vendor(); cpu[keys::cpu::vendor] = CPUIdent::Vendor();
cpu[keys::cpu::model] = CPUIdent::Brand(); cpu[keys::cpu::model] = CPUIdent::Brand();
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency(); cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
_cpu.push_back(cpu); _cpus.push_back(cpu);
} }
void MACOSInstance::enumerateGpu() { void MACOSInstance::enumerateGpus() {
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
GPUIdent* ident = GPUIdent::getInstance(); GPUIdent* ident = GPUIdent::getInstance();
json gpu = {}; json gpu = {};
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
gpu[keys::gpu::model] = ident->getName().toUtf8().constData(); gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
gpu[keys::gpu::videoMemory] = ident->getMemory(); gpu[keys::gpu::videoMemory] = ident->getMemory();
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData(); gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
_gpu.push_back(gpu); _gpus.push_back(gpu);
#endif #endif
@ -101,7 +102,7 @@ void MACOSInstance::enumerateDisplays() {
display["modeWidth"] = displayModeWidth; display["modeWidth"] = displayModeWidth;
display["modeHeight"] = displayModeHeight; display["modeHeight"] = displayModeHeight;
_display.push_back(display); _displays.push_back(display);
#endif #endif
} }
@ -111,9 +112,9 @@ void MACOSInstance::enumerateMemory() {
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
long pages = sysconf(_SC_PHYS_PAGES); long pages = sysconf(_SC_PHYS_PAGES);
long page_size = sysconf(_SC_PAGE_SIZE); long page_size = sysconf(_SC_PAGE_SIZE);
ram[keys::memTotal] = pages * page_size; ram[keys::memory::memTotal] = pages * page_size;
#endif #endif
_memory.push_back(ram); _memory = ram;
} }
void MACOSInstance::enumerateComputer(){ void MACOSInstance::enumerateComputer(){
@ -133,5 +134,9 @@ void MACOSInstance::enumerateComputer(){
free(model); free(model);
#endif #endif
auto sysInfo = QSysInfo();
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
} }

View file

@ -15,11 +15,11 @@ namespace platform {
class MACOSInstance : public Instance { class MACOSInstance : public Instance {
public: public:
void enumerateCpu() override; void enumerateCpus() override;
void enumerateMemory() override; void enumerateGpus() override;
void enumerateGpu() override;
void enumerateDisplays() override; void enumerateDisplays() override;
void enumerateComputer () override; void enumerateMemory() override;
void enumerateComputer() override;
}; };
} // namespace platform } // namespace platform

View file

@ -11,6 +11,8 @@
#include "../PlatformKeys.h" #include "../PlatformKeys.h"
namespace platform { namespace keys { namespace platform { namespace keys {
const char* UNKNOWN = "UNKNOWN";
namespace cpu { namespace cpu {
const char* vendor = "vendor"; const char* vendor = "vendor";
const char* vendor_Intel = "Intel"; const char* vendor_Intel = "Intel";
@ -38,8 +40,9 @@ namespace platform { namespace keys {
const char* coordsTop = "coordinatestop"; const char* coordsTop = "coordinatestop";
const char* coordsBottom = "coordinatesbottom"; const char* coordsBottom = "coordinatesbottom";
} }
const char* memTotal = "memTotal"; namespace memory {
const char* memTotal = "memTotal";
}
namespace computer { namespace computer {
const char* OS = "OS"; const char* OS = "OS";
const char* OS_WINDOWS = "WINDOWS"; const char* OS_WINDOWS = "WINDOWS";
@ -47,6 +50,8 @@ namespace platform { namespace keys {
const char* OS_LINUX = "LINUX"; const char* OS_LINUX = "LINUX";
const char* OS_ANDROID = "ANDROID"; const char* OS_ANDROID = "ANDROID";
const char* OSVersion = "OSVersion";
const char* vendor = "vendor"; const char* vendor = "vendor";
const char* vendor_Apple = "Apple"; const char* vendor_Apple = "Apple";
@ -54,6 +59,12 @@ namespace platform { namespace keys {
const char* profileTier = "profileTier"; const char* profileTier = "profileTier";
} }
const char* CPUS = "cpus";
const char* GPUS = "gpus";
const char* DISPLAYS = "displays";
const char* MEMORY = "memory";
const char* COMPUTER = "computer";
}} }}
#include <qglobal.h> #include <qglobal.h>
@ -117,14 +128,14 @@ json platform::getDisplay(int index) {
return _instance->getDisplay(index); return _instance->getDisplay(index);
} }
int platform::getNumMemories() { json platform::getMemory() {
return _instance->getNumMemories(); return _instance->getMemory();
} }
json platform::getMemory(int index) { json platform::getComputer() {
return _instance->getMemory(index);
}
json platform::getComputer(){
return _instance->getComputer(); return _instance->getComputer();
} }
json platform::getAll() {
return _instance->getAll();
}

View file

@ -16,10 +16,10 @@ using namespace platform;
bool Instance::enumeratePlatform() { bool Instance::enumeratePlatform() {
enumerateComputer(); enumerateComputer();
enumerateCpu();
enumerateGpu();
enumerateDisplays();
enumerateMemory(); enumerateMemory();
enumerateCpus();
enumerateGpus();
enumerateDisplays();
// And profile the platform and put the tier in "computer" // And profile the platform and put the tier in "computer"
_computer[keys::computer::profileTier] = Profiler::TierNames[Profiler::profilePlatform()]; _computer[keys::computer::profileTier] = Profiler::TierNames[Profiler::profilePlatform()];
@ -28,55 +28,42 @@ bool Instance::enumeratePlatform() {
} }
json Instance::getCPU(int index) { json Instance::getCPU(int index) {
assert(index <(int) _cpu.size()); assert(index <(int) _cpus.size());
if (index >= (int)_cpu.size()) if (index >= (int)_cpus.size())
return json(); return json();
return _cpu.at(index); return _cpus.at(index);
}
//These are ripe for template.. will work on that next
json Instance::getMemory(int index) {
assert(index <(int) _memory.size());
if(index >= (int)_memory.size())
return json();
return _memory.at(index);
} }
json Instance::getGPU(int index) { json Instance::getGPU(int index) {
assert(index <(int) _gpu.size()); assert(index <(int) _gpus.size());
if (index >=(int) _gpu.size()) if (index >=(int) _gpus.size())
return json(); return json();
return _gpu.at(index); return _gpus.at(index);
} }
json Instance::getDisplay(int index) { json Instance::getDisplay(int index) {
assert(index <(int) _display.size()); assert(index <(int) _displays.size());
if (index >=(int) _display.size()) if (index >=(int) _displays.size())
return json(); return json();
return _display.at(index); return _displays.at(index);
} }
Instance::~Instance() { Instance::~Instance() {
if (_cpu.size() > 0) { if (_cpus.size() > 0) {
_cpu.clear(); _cpus.clear();
} }
if (_memory.size() > 0) { if (_gpus.size() > 0) {
_memory.clear(); _gpus.clear();
} }
if (_gpu.size() > 0) { if (_displays.size() > 0) {
_gpu.clear(); _displays.clear();
}
if (_display.size() > 0) {
_display.clear();
} }
} }
@ -106,17 +93,53 @@ json Instance::listAllKeys() {
keys::display::coordsTop, keys::display::coordsTop,
keys::display::coordsBottom, keys::display::coordsBottom,
keys::memTotal, keys::memory::memTotal,
keys::computer::OS, keys::computer::OS,
keys::computer::OS_WINDOWS, keys::computer::OS_WINDOWS,
keys::computer::OS_MACOS, keys::computer::OS_MACOS,
keys::computer::OS_LINUX, keys::computer::OS_LINUX,
keys::computer::OS_ANDROID, keys::computer::OS_ANDROID,
keys::computer::OSVersion,
keys::computer::vendor, keys::computer::vendor,
keys::computer::vendor_Apple, keys::computer::vendor_Apple,
keys::computer::model, keys::computer::model,
keys::computer::profileTier keys::computer::profileTier,
keys::CPUS,
keys::GPUS,
keys::DISPLAYS,
keys::MEMORY,
keys::COMPUTER,
}}); }});
return allKeys; return allKeys;
} }
const char* Instance::findGPUVendorInDescription(const std::string& description) {
// intel integrated graphics
if (description.find(keys::gpu::vendor_Intel) != std::string::npos) {
return keys::gpu::vendor_Intel;
}
// AMD gpu
else if (description.find(keys::gpu::vendor_AMD) != std::string::npos) {
return keys::gpu::vendor_AMD;
}
// NVIDIA gpu
else if (description.find(keys::gpu::vendor_NVIDIA) != std::string::npos) {
return keys::gpu::vendor_NVIDIA;
} else {
return keys::UNKNOWN;
}
}
json Instance::getAll() {
json all = {};
all[keys::COMPUTER] = _computer;
all[keys::MEMORY] = _memory;
all[keys::CPUS] = _cpus;
all[keys::GPUS] = _gpus;
all[keys::DISPLAYS] = _displays;
return all;
}

View file

@ -19,36 +19,39 @@ class Instance {
public: public:
bool virtual enumeratePlatform(); bool virtual enumeratePlatform();
int getNumCPUs() { return (int)_cpu.size(); } int getNumCPUs() { return (int)_cpus.size(); }
json getCPU(int index); json getCPU(int index);
int getNumGPUs() { return (int)_gpu.size(); } int getNumGPUs() { return (int)_gpus.size(); }
json getGPU(int index); json getGPU(int index);
int getNumMemories() { return (int)_memory.size(); } int getNumDisplays() { return (int)_displays.size(); }
json getMemory(int index);
int getNumDisplays() { return (int)_display.size(); }
json getDisplay(int index); json getDisplay(int index);
json getMemory() { return _memory; }
json getComputer() { return _computer; }
json getComputer() {return _computer;} json getAll();
void virtual enumerateCpu()=0; void virtual enumerateCpus()=0;
void virtual enumerateMemory()=0; void virtual enumerateGpus()=0;
void virtual enumerateGpu()=0;
void virtual enumerateDisplays() {} void virtual enumerateDisplays() {}
void virtual enumerateMemory() = 0;
void virtual enumerateComputer()=0; void virtual enumerateComputer()=0;
virtual ~Instance(); virtual ~Instance();
static json listAllKeys(); static json listAllKeys();
// Helper function to filter the vendor name out of the description of a GPU
static const char* findGPUVendorInDescription(const std::string& description);
protected: protected:
std::vector<json> _cpu; std::vector<json> _cpus;
std::vector<json> _memory; std::vector<json> _gpus;
std::vector<json> _gpu; std::vector<json> _displays;
std::vector<json> _display; json _memory;
json _computer; json _computer;
}; };

View file

@ -16,32 +16,33 @@
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
#include <Windows.h> #include <Windows.h>
#include <QSysInfo>
#endif #endif
using namespace platform; using namespace platform;
void WINInstance::enumerateCpu() { void WINInstance::enumerateCpus() {
json cpu = {}; json cpu = {};
cpu[keys::cpu::vendor] = CPUIdent::Vendor(); cpu[keys::cpu::vendor] = CPUIdent::Vendor();
cpu[keys::cpu::model] = CPUIdent::Brand(); cpu[keys::cpu::model] = CPUIdent::Brand();
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency(); cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
_cpu.push_back(cpu); _cpus.push_back(cpu);
} }
void WINInstance::enumerateGpu() { void WINInstance::enumerateGpus() {
GPUIdent* ident = GPUIdent::getInstance(); GPUIdent* ident = GPUIdent::getInstance();
json gpu = {}; json gpu = {};
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
gpu[keys::gpu::model] = ident->getName().toUtf8().constData(); gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
gpu[keys::gpu::videoMemory] = ident->getMemory(); gpu[keys::gpu::videoMemory] = ident->getMemory();
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData(); gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
_gpu.push_back(gpu); _gpus.push_back(gpu);
_display = ident->getOutput(); _displays = ident->getOutput();
} }
void WINInstance::enumerateMemory() { void WINInstance::enumerateMemory() {
@ -52,9 +53,9 @@ void WINInstance::enumerateMemory() {
statex.dwLength = sizeof(statex); statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex); GlobalMemoryStatusEx(&statex);
int totalRam = statex.ullTotalPhys / 1024 / 1024; int totalRam = statex.ullTotalPhys / 1024 / 1024;
ram[platform::keys::memTotal] = totalRam; ram[platform::keys::memory::memTotal] = totalRam;
#endif #endif
_memory.push_back(ram); _memory = ram;
} }
void WINInstance::enumerateComputer(){ void WINInstance::enumerateComputer(){
@ -62,5 +63,8 @@ void WINInstance::enumerateComputer(){
_computer[keys::computer::vendor] = ""; _computer[keys::computer::vendor] = "";
_computer[keys::computer::model] = ""; _computer[keys::computer::model] = "";
auto sysInfo = QSysInfo();
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
} }

View file

@ -15,9 +15,9 @@ namespace platform {
class WINInstance : public Instance { class WINInstance : public Instance {
public: public:
void enumerateCpu() override; void enumerateCpus() override;
void enumerateGpus() override;
void enumerateMemory() override; void enumerateMemory() override;
void enumerateGpu() override;
void enumerateComputer () override; void enumerateComputer () override;
}; };
} // namespace platform } // namespace platform

View file

@ -282,12 +282,13 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer)
if (!validAdapterList.empty()) { if (!validAdapterList.empty()) {
for (auto outy = adapterToOutputs.begin(); outy != adapterToOutputs.end(); ++outy) { for (auto outy = adapterToOutputs.begin(); outy != adapterToOutputs.end(); ++outy) {
AdapterEntry entry = *outy; AdapterEntry entry = *outy;
for (auto test = entry.second.begin(); test != entry.second.end(); ++test) { for (auto test = entry.second.begin(); test != entry.second.end(); ++test) {
std::wstring wDeviceName(test->DeviceName);
std::string deviceName(wDeviceName.begin(), wDeviceName.end());
nlohmann::json output = {}; nlohmann::json output = {};
output["description"] = entry.first.first.Description; output["model"] = deviceName;
output["deviceName"]= test->DeviceName;
output["coordinatesleft"] = test->DesktopCoordinates.left; output["coordinatesleft"] = test->DesktopCoordinates.left;
output["coordinatesright"] = test->DesktopCoordinates.right; output["coordinatesright"] = test->DesktopCoordinates.right;
output["coordinatestop"] = test->DesktopCoordinates.top; output["coordinatestop"] = test->DesktopCoordinates.top;