mirror of
https://github.com/PCSX2/pcsx2.git
synced 2025-12-16 04:08:48 +00:00
Common: Add helper for getting CPU info
This commit is contained in:
parent
61c653c49c
commit
20241f301b
@ -174,9 +174,6 @@ else()
|
|||||||
target_compile_definitions(common PRIVATE "HAS_LIBBACKTRACE=1")
|
target_compile_definitions(common PRIVATE "HAS_LIBBACKTRACE=1")
|
||||||
target_link_libraries(common PRIVATE libbacktrace::libbacktrace)
|
target_link_libraries(common PRIVATE libbacktrace::libbacktrace)
|
||||||
endif()
|
endif()
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
|
||||||
target_link_libraries(common PRIVATE cpuinfo)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_source_files_properties(PrecompiledHeader.cpp PROPERTIES HEADER_FILE_ONLY TRUE)
|
set_source_files_properties(PrecompiledHeader.cpp PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||||
@ -206,6 +203,7 @@ target_link_libraries(common PRIVATE
|
|||||||
JPEG::JPEG
|
JPEG::JPEG
|
||||||
PNG::PNG
|
PNG::PNG
|
||||||
WebP::libwebp
|
WebP::libwebp
|
||||||
|
cpuinfo
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(common PUBLIC
|
target_link_libraries(common PUBLIC
|
||||||
|
|||||||
@ -271,7 +271,7 @@ std::vector<DarwinMisc::CPUClass> DarwinMisc::GetCPUClasses()
|
|||||||
}
|
}
|
||||||
else if (std::optional<u32> physcpu = sysctlbyname_T<u32>("hw.physicalcpu"))
|
else if (std::optional<u32> physcpu = sysctlbyname_T<u32>("hw.physicalcpu"))
|
||||||
{
|
{
|
||||||
out.push_back({"Default", *physcpu, sysctlbyname_T<u32>("hw.logicalcpu").value_or(0)});
|
out.push_back({"Default", *physcpu, sysctlbyname_T<u32>("hw.logicalcpu").value_or(*physcpu)});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -281,6 +281,35 @@ std::vector<DarwinMisc::CPUClass> DarwinMisc::GetCPUClasses()
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CPUInfo CalcCPUInfo()
|
||||||
|
{
|
||||||
|
CPUInfo out;
|
||||||
|
char name[256];
|
||||||
|
size_t name_size = sizeof(name);
|
||||||
|
if (0 != sysctlbyname("machdep.cpu.brand_string", name, &name_size, nullptr, 0))
|
||||||
|
strcpy(name, "Unknown");
|
||||||
|
out.name = name;
|
||||||
|
if (sysctlbyname_T<u32>("sysctl.proc_translated").value_or(0))
|
||||||
|
out.name += " (Rosetta)";
|
||||||
|
std::vector<DarwinMisc::CPUClass> classes = DarwinMisc::GetCPUClasses();
|
||||||
|
out.num_clusters = static_cast<u32>(classes.size());
|
||||||
|
out.num_big_cores = classes.empty() ? 0 : classes[0].num_physical;
|
||||||
|
out.num_threads = classes.empty() ? 0 : classes[0].num_logical;
|
||||||
|
out.num_small_cores = 0;
|
||||||
|
for (std::size_t i = 1; i < classes.size(); i++)
|
||||||
|
{
|
||||||
|
out.num_small_cores += classes[i].num_physical;
|
||||||
|
out.num_threads += classes[i].num_logical;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
const CPUInfo& GetCPUInfo()
|
||||||
|
{
|
||||||
|
static const CPUInfo info = CalcCPUInfo();
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
size_t HostSys::GetRuntimePageSize()
|
size_t HostSys::GetRuntimePageSize()
|
||||||
{
|
{
|
||||||
return sysctlbyname_T<u32>("hw.pagesize").value_or(0);
|
return sysctlbyname_T<u32>("hw.pagesize").value_or(0);
|
||||||
|
|||||||
@ -5,6 +5,10 @@
|
|||||||
#include "Console.h"
|
#include "Console.h"
|
||||||
#include "VectorIntrin.h"
|
#include "VectorIntrin.h"
|
||||||
|
|
||||||
|
#ifndef __APPLE__
|
||||||
|
#include "cpuinfo.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
static u32 PAUSE_TIME = 0;
|
static u32 PAUSE_TIME = 0;
|
||||||
|
|
||||||
static void MultiPause()
|
static void MultiPause()
|
||||||
@ -135,3 +139,43 @@ void AbortWithMessage(const char* msg)
|
|||||||
#endif
|
#endif
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __APPLE__
|
||||||
|
// MacOS version is in DarwinMisc
|
||||||
|
static CPUInfo CalcCPUInfo()
|
||||||
|
{
|
||||||
|
CPUInfo out;
|
||||||
|
out.name = cpuinfo_get_package(0)->name;
|
||||||
|
out.num_threads = cpuinfo_get_processors_count();
|
||||||
|
out.num_clusters = cpuinfo_get_clusters_count();
|
||||||
|
out.num_big_cores = 0;
|
||||||
|
out.num_small_cores = 0;
|
||||||
|
const cpuinfo_cluster* clusters = cpuinfo_get_clusters();
|
||||||
|
uint64_t big_freq = 0;
|
||||||
|
for (uint32_t i = 0; i < out.num_clusters; i++)
|
||||||
|
{
|
||||||
|
const cpuinfo_cluster& cluster = clusters[i];
|
||||||
|
if (cluster.frequency > big_freq)
|
||||||
|
{
|
||||||
|
out.num_small_cores += out.num_big_cores;
|
||||||
|
out.num_big_cores = cluster.core_count;
|
||||||
|
big_freq = cluster.frequency;
|
||||||
|
}
|
||||||
|
else if (cluster.frequency == big_freq)
|
||||||
|
{
|
||||||
|
out.num_big_cores += cluster.core_count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out.num_small_cores += cluster.core_count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
const CPUInfo& GetCPUInfo()
|
||||||
|
{
|
||||||
|
static const CPUInfo info = CalcCPUInfo();
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@ -192,6 +192,16 @@ extern const u32 SPIN_TIME_NS;
|
|||||||
|
|
||||||
extern std::string GetOSVersionString();
|
extern std::string GetOSVersionString();
|
||||||
|
|
||||||
|
struct CPUInfo {
|
||||||
|
std::string name;
|
||||||
|
u32 num_big_cores;
|
||||||
|
u32 num_small_cores;
|
||||||
|
u32 num_threads;
|
||||||
|
u32 num_clusters;
|
||||||
|
};
|
||||||
|
|
||||||
|
const CPUInfo& GetCPUInfo();
|
||||||
|
|
||||||
namespace Common
|
namespace Common
|
||||||
{
|
{
|
||||||
/// Enables or disables the screen saver from starting.
|
/// Enables or disables the screen saver from starting.
|
||||||
|
|||||||
@ -32,6 +32,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\cpuinfo\include</AdditionalIncludeDirectories>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\fast_float\include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\fast_float\include</AdditionalIncludeDirectories>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\fmt\include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\fmt\include</AdditionalIncludeDirectories>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\jpgd</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\jpgd</AdditionalIncludeDirectories>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user