diff --git a/libraries/platform/src/AndroidPlatform.cpp b/libraries/platform/src/AndroidPlatform.cpp index e998f6f938..f35674a984 100644 --- a/libraries/platform/src/AndroidPlatform.cpp +++ b/libraries/platform/src/AndroidPlatform.cpp @@ -8,9 +8,8 @@ #include "AndroidPlatform.h" #include "platformJsonKeys.h" - #include -#include + using namespace platform; void AndroidInstance::enumerateCpu() { @@ -35,6 +34,11 @@ void AndroidInstance::enumerateGpu() { void AndroidInstance::enumerateMemory() { json ram = {}; - + ram["totalMemory"]=""; _memory.push_back(ram); } + +void AndroidInstance::enumerateComputer(){ + //no implememntation at this time +} + diff --git a/libraries/platform/src/AndroidPlatform.h b/libraries/platform/src/AndroidPlatform.h index 17efbb45e3..66d80ca1ef 100644 --- a/libraries/platform/src/AndroidPlatform.h +++ b/libraries/platform/src/AndroidPlatform.h @@ -18,6 +18,7 @@ namespace platform { void enumerateCpu() override; void enumerateMemory() override; void enumerateGpu() override; + void enumerateComputer () override; }; } // namespace platform diff --git a/libraries/platform/src/LinuxPlatform.cpp b/libraries/platform/src/LinuxPlatform.cpp index 96c105826f..aa63eb1e08 100644 --- a/libraries/platform/src/LinuxPlatform.cpp +++ b/libraries/platform/src/LinuxPlatform.cpp @@ -9,7 +9,6 @@ #include "LinuxPlatform.h" #include "platformJsonKeys.h" #include -#include using namespace platform; void LinuxInstance::enumerateCpu() { @@ -36,7 +35,12 @@ void LinuxInstance::enumerateGpu() { void LinuxInstance::enumerateMemory() { json ram = {}; - + ram["totalMemory"]=""; _memory.push_back(ram); } + +void LinuxInstance::enumerateComputer(){ + //no implememntation at this time +} + diff --git a/libraries/platform/src/LinuxPlatform.h b/libraries/platform/src/LinuxPlatform.h index 1af4ce7444..63db8557f0 100644 --- a/libraries/platform/src/LinuxPlatform.h +++ b/libraries/platform/src/LinuxPlatform.h @@ -18,6 +18,7 @@ namespace platform { void enumerateCpu() override; void enumerateMemory() override; void enumerateGpu() override; + void enumerateComputer () override; }; } // namespace platform diff --git a/libraries/platform/src/MACOSPlatform.cpp b/libraries/platform/src/MACOSPlatform.cpp index 172cd642aa..7081044879 100644 --- a/libraries/platform/src/MACOSPlatform.cpp +++ b/libraries/platform/src/MACOSPlatform.cpp @@ -8,6 +8,7 @@ #include "MACOSPlatform.h" #include "platformJsonKeys.h" + #include #include #include @@ -15,6 +16,7 @@ #ifdef Q_OS_MAC #include #include +#include #endif using namespace platform; @@ -33,6 +35,7 @@ static void getCpuId( uint32_t* p, uint32_t ax ) #endif } + void MACOSInstance::enumerateCpu() { json cpu = {}; uint32_t cpuInfo[4]={0,0,0,0}; @@ -72,6 +75,7 @@ void MACOSInstance::enumerateGpu() { _gpu.push_back(gpu); _display = ident->getOutput(); + } void MACOSInstance::enumerateMemory() { @@ -84,3 +88,20 @@ void MACOSInstance::enumerateMemory() { #endif _memory.push_back(ram); } + +void MACOSInstance::enumerateComputer(){ +#ifdef Q_OS_MAC + + //get system name + size_t len=0; + sysctlbyname("hw.model",NULL, &len, NULL, 0); + char* model = (char *) malloc(sizeof(char)*len+1); + sysctlbyname("hw.model", model, &len, NULL,0); + + _computer["computerModel"]=std::string(model); + + free(model); + +#endif +} + diff --git a/libraries/platform/src/MACOSPlatform.h b/libraries/platform/src/MACOSPlatform.h index 287e0c0ed7..04b8621698 100644 --- a/libraries/platform/src/MACOSPlatform.h +++ b/libraries/platform/src/MACOSPlatform.h @@ -18,8 +18,9 @@ namespace platform { void enumerateCpu() override; void enumerateMemory() override; void enumerateGpu() override; + void enumerateComputer () override; }; } // namespace platform -#endif //hifi_winplatform_h +#endif //hifi_macosplatform_h diff --git a/libraries/platform/src/WINPlatform.cpp b/libraries/platform/src/WINPlatform.cpp index 601a9d7290..8b37aa4e77 100644 --- a/libraries/platform/src/WINPlatform.cpp +++ b/libraries/platform/src/WINPlatform.cpp @@ -8,6 +8,7 @@ #include "WINPlatform.h" #include "platformJsonKeys.h" + #ifdef Q_OS_WINDOWS #include #include @@ -76,7 +77,12 @@ void WINInstance::enumerateMemory() { statex.dwLength = sizeof(statex); GlobalMemoryStatusEx(&statex); int totalRam = statex.ullTotalPhys / 1024 / 1024; - ram[jsonKeys::totalMemory] = totalRam; + ram["totalMemory"] = totalRam; #endif _memory.push_back(ram); } + +void WINInstance::enumerateComputer(){ + //no implememntation at this time +} + diff --git a/libraries/platform/src/WINPlatform.h b/libraries/platform/src/WINPlatform.h index 4d466a9b7e..828d27ffc3 100644 --- a/libraries/platform/src/WINPlatform.h +++ b/libraries/platform/src/WINPlatform.h @@ -18,7 +18,7 @@ namespace platform { void enumerateCpu() override; void enumerateMemory() override; void enumerateGpu() override; - + void enumerateComputer () override; }; } // namespace platform diff --git a/libraries/platform/src/platform.cpp b/libraries/platform/src/platform.cpp index 27e773d435..64bd536eee 100644 --- a/libraries/platform/src/platform.cpp +++ b/libraries/platform/src/platform.cpp @@ -77,3 +77,7 @@ int platform::getNumMemory() { json platform::getMemory(int index) { return _instance->getMemory(index); } + +json platform::getComputer(){ + return _instance->getComputer(); +} diff --git a/libraries/platform/src/platform.h b/libraries/platform/src/platform.h index 895114ba6d..14ec5fa8b2 100644 --- a/libraries/platform/src/platform.h +++ b/libraries/platform/src/platform.h @@ -9,8 +9,7 @@ #ifndef hifi_Platform_h #define hifi_Platform_h -#include "platformInstance.h" -#include + #include namespace platform { @@ -32,6 +31,8 @@ json getDisplay(int index); int getNumMemory(); json getMemory(int index); +json getComputer(); + } // namespace platform #endif // hifi_platform_h diff --git a/libraries/platform/src/platformInstance.cpp b/libraries/platform/src/platformInstance.cpp index 705f5bd358..5859577748 100644 --- a/libraries/platform/src/platformInstance.cpp +++ b/libraries/platform/src/platformInstance.cpp @@ -7,24 +7,13 @@ // -#include "platform.h" - +#include "platformInstance.h" #include -#ifdef Q_OS_WIN -#include "WINPlatform.h" -#endif - -#ifdef Q_OS_MACOS -#include "MACOSPlatform.h" -#endif - -#ifdef Q_OS_LINUX -#endif - using namespace platform; bool Instance::enumeratePlatform() { + enumerateComputer(); enumerateCpu(); enumerateGpu(); enumerateMemory(); @@ -75,7 +64,6 @@ Instance::~Instance() { _memory.clear(); } - if (_gpu.size() > 0) { _gpu.clear(); } diff --git a/libraries/platform/src/platformInstance.h b/libraries/platform/src/platformInstance.h index 4770200f07..8d0a181e3d 100644 --- a/libraries/platform/src/platformInstance.h +++ b/libraries/platform/src/platformInstance.h @@ -31,9 +31,13 @@ public: int getNumDisplay() { return (int)_display.size(); } json getDisplay(int index); + + json getComputer() {return _computer;} + void virtual enumerateCpu()=0; void virtual enumerateMemory()=0; void virtual enumerateGpu()=0; + void virtual enumerateComputer()=0; virtual ~Instance(); @@ -42,6 +46,7 @@ protected: std::vector _memory; std::vector _gpu; std::vector _display; + json _computer; }; } // namespace platform diff --git a/libraries/platform/src/platformJsonKeys.h b/libraries/platform/src/platformJsonKeys.h index 633add2b7e..31d81a829c 100644 --- a/libraries/platform/src/platformJsonKeys.h +++ b/libraries/platform/src/platformJsonKeys.h @@ -26,9 +26,12 @@ namespace platform { static const char* displayCoordsRight { "coordinatesright"}; static const char* displayCoordsTop { "coordinatestop"}; static const char* displayCoordsBottom { "coordinatesbottom"}; + static const char* computerModel { "computerModel"}; + #endif + } -} // namespace platform +} // namespace plaform::jsonKeys #endif diff --git a/libraries/shared/src/GPUIdent.cpp b/libraries/shared/src/GPUIdent.cpp index a78ded483b..773e40aaee 100644 --- a/libraries/shared/src/GPUIdent.cpp +++ b/libraries/shared/src/GPUIdent.cpp @@ -22,6 +22,10 @@ #elif defined(Q_OS_MAC) #include +#include +#include +#include + #endif #include @@ -56,6 +60,27 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer) } } } + + //get gpu name + FILE* stream = popen("system_profiler SPDisplaysDataType | grep Chipset", "r"); + + std::ostringstream hostStream; + while (!feof(stream) && !ferror(stream)) { + char buf[128]; + int bytesRead = fread(buf, 1, 128, stream); + hostStream.write(buf, bytesRead); + } + + QString result = QString::fromStdString(hostStream.str()); + QStringList parts = result.split('\n'); + std::string name; + + for (int i = 0; i < parts.size(); ++i) { + if (parts[i].toLower().contains("radeon") || parts[i].toLower().contains("nvidia")) { + _name=parts[i]; + } + } + _dedicatedMemoryMB = bestVRAM; CGLDestroyRendererInfo(rendererInfo);