From 90e4a1ca528b22a8ac94f048a4b7bc56ea5ff5e8 Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 19 May 2015 14:13:48 +0200 Subject: [PATCH] Core/HardwareInfo: Added GetTotalMemory Former-commit-id: 71289723115161dd253ccb65c1c91af65344c678 --- build/scripts/features/core.lua | 3 +-- include/Nazara/Core/HardwareInfo.hpp | 1 + src/Nazara/Core/HardwareInfo.cpp | 7 +++++++ src/Nazara/Core/Posix/HardwareInfoImpl.cpp | 8 ++++++++ src/Nazara/Core/Posix/HardwareInfoImpl.hpp | 1 + src/Nazara/Core/Win32/HardwareInfoImpl.cpp | 9 +++++++++ src/Nazara/Core/Win32/HardwareInfoImpl.hpp | 1 + 7 files changed, 28 insertions(+), 2 deletions(-) diff --git a/build/scripts/features/core.lua b/build/scripts/features/core.lua index 120917eab..aed10058a 100644 --- a/build/scripts/features/core.lua +++ b/build/scripts/features/core.lua @@ -196,8 +196,7 @@ return { { Title = "Récupération d'informations sur le hardware", Description = "Classe permettant, si la plateforme le supporte, de récupérer des informations utiles sur le matériel: nom et fabricant du processeur, nombre de coeurs, support d'un set d'extension (exemple: SSE), quantité de mémoire vive, exécution de l'instruction CPUID.", - Note = "Il manque de quoi récupérer la quantité de mémoire vive", - Progress = 90, + Progress = 100, Portability = Feature.Windows + Feature.POSIX } } diff --git a/include/Nazara/Core/HardwareInfo.hpp b/include/Nazara/Core/HardwareInfo.hpp index 73f0c9eb8..8c5cf3b37 100644 --- a/include/Nazara/Core/HardwareInfo.hpp +++ b/include/Nazara/Core/HardwareInfo.hpp @@ -20,6 +20,7 @@ class NAZARA_API NzHardwareInfo static unsigned int GetProcessorCount(); static nzProcessorVendor GetProcessorVendor(); static NzString GetProcessorVendorName(); + static nzUInt64 GetTotalMemory(); static bool HasCapability(nzProcessorCap capability); diff --git a/src/Nazara/Core/HardwareInfo.cpp b/src/Nazara/Core/HardwareInfo.cpp index 762012b8f..fddf6b4fc 100644 --- a/src/Nazara/Core/HardwareInfo.cpp +++ b/src/Nazara/Core/HardwareInfo.cpp @@ -116,6 +116,13 @@ NzString NzHardwareInfo::GetProcessorVendorName() return vendorNames[s_vendorEnum+1]; } +nzUInt64 NzHardwareInfo::GetTotalMemory() +{ + ///DOC: Ne nécessite pas l'initialisation de HardwareInfo pour fonctionner + static nzUInt64 totalMemory = NzHardwareInfoImpl::GetTotalMemory(); + return totalMemory; +} + bool NzHardwareInfo::HasCapability(nzProcessorCap capability) { #ifdef NAZARA_DEBUG diff --git a/src/Nazara/Core/Posix/HardwareInfoImpl.cpp b/src/Nazara/Core/Posix/HardwareInfoImpl.cpp index bed1793e6..31713defd 100644 --- a/src/Nazara/Core/Posix/HardwareInfoImpl.cpp +++ b/src/Nazara/Core/Posix/HardwareInfoImpl.cpp @@ -24,6 +24,14 @@ unsigned int NzHardwareInfoImpl::GetProcessorCount() return sysconf(_SC_NPROCESSORS_CONF); } +nzUInt64 NzHardwareInfoImpl::GetTotalMemory() +{ + nzUInt64 pages = sysconf(_SC_PHYS_PAGES); + nzUInt64 page_size = sysconf(_SC_PAGE_SIZE); + + return pages * page_size; +} + bool NzHardwareInfoImpl::IsCpuidSupported() { #ifdef NAZARA_PLATFORM_x64 diff --git a/src/Nazara/Core/Posix/HardwareInfoImpl.hpp b/src/Nazara/Core/Posix/HardwareInfoImpl.hpp index 8607f3f77..ef05a7aeb 100644 --- a/src/Nazara/Core/Posix/HardwareInfoImpl.hpp +++ b/src/Nazara/Core/Posix/HardwareInfoImpl.hpp @@ -15,6 +15,7 @@ class NzHardwareInfoImpl public: static void Cpuid(nzUInt32 functionId, nzUInt32 subFunctionId, nzUInt32 registers[4]); static unsigned int GetProcessorCount(); + static nzUInt64 GetTotalMemory(); static bool IsCpuidSupported(); }; diff --git a/src/Nazara/Core/Win32/HardwareInfoImpl.cpp b/src/Nazara/Core/Win32/HardwareInfoImpl.cpp index 5d2c74e50..bc6e2344b 100644 --- a/src/Nazara/Core/Win32/HardwareInfoImpl.cpp +++ b/src/Nazara/Core/Win32/HardwareInfoImpl.cpp @@ -38,6 +38,15 @@ unsigned int NzHardwareInfoImpl::GetProcessorCount() return infos.dwNumberOfProcessors; } +nzUInt64 NzHardwareInfoImpl::GetTotalMemory() +{ + MEMORYSTATUSEX memStatus; + memStatus.dwLength = sizeof(memStatus); + GlobalMemoryStatusEx(&memStatus); + + return memStatus.ullTotalPhys; +} + bool NzHardwareInfoImpl::IsCpuidSupported() { #ifdef NAZARA_PLATFORM_x64 diff --git a/src/Nazara/Core/Win32/HardwareInfoImpl.hpp b/src/Nazara/Core/Win32/HardwareInfoImpl.hpp index df8d9a5d7..0b4d477f8 100644 --- a/src/Nazara/Core/Win32/HardwareInfoImpl.hpp +++ b/src/Nazara/Core/Win32/HardwareInfoImpl.hpp @@ -14,6 +14,7 @@ class NzHardwareInfoImpl public: static void Cpuid(nzUInt32 functionId, nzUInt32 subFunctionId, nzUInt32 registers[4]); static unsigned int GetProcessorCount(); + static nzUInt64 GetTotalMemory(); static bool IsCpuidSupported(); };