mirror of https://github.com/PCSX2/pcsx2.git
Common: Add helper for getting CPU info
This commit is contained in:
parent
33ab6fd09b
commit
355e3d3cc8
|
@ -174,9 +174,6 @@ else()
|
|||
target_compile_definitions(common PRIVATE "HAS_LIBBACKTRACE=1")
|
||||
target_link_libraries(common PRIVATE libbacktrace::libbacktrace)
|
||||
endif()
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||
target_link_libraries(common PRIVATE cpuinfo)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set_source_files_properties(PrecompiledHeader.cpp PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
|
@ -206,6 +203,7 @@ target_link_libraries(common PRIVATE
|
|||
JPEG::JPEG
|
||||
PNG::PNG
|
||||
WebP::libwebp
|
||||
cpuinfo
|
||||
)
|
||||
|
||||
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"))
|
||||
{
|
||||
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
|
||||
{
|
||||
|
@ -281,6 +281,35 @@ std::vector<DarwinMisc::CPUClass> DarwinMisc::GetCPUClasses()
|
|||
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()
|
||||
{
|
||||
return sysctlbyname_T<u32>("hw.pagesize").value_or(0);
|
||||
|
|
|
@ -5,6 +5,10 @@
|
|||
#include "Console.h"
|
||||
#include "VectorIntrin.h"
|
||||
|
||||
#ifndef __APPLE__
|
||||
#include "cpuinfo.h"
|
||||
#endif
|
||||
|
||||
static u32 PAUSE_TIME = 0;
|
||||
|
||||
static void MultiPause()
|
||||
|
@ -135,3 +139,43 @@ void AbortWithMessage(const char* msg)
|
|||
#endif
|
||||
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();
|
||||
|
||||
struct CPUInfo {
|
||||
std::string name;
|
||||
u32 num_big_cores;
|
||||
u32 num_small_cores;
|
||||
u32 num_threads;
|
||||
u32 num_clusters;
|
||||
};
|
||||
|
||||
const CPUInfo& GetCPUInfo();
|
||||
|
||||
namespace Common
|
||||
{
|
||||
/// Enables or disables the screen saver from starting.
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\cpuinfo\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\fast_float\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\fmt\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\jpgd</AdditionalIncludeDirectories>
|
||||
|
@ -191,4 +192,4 @@
|
|||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
Loading…
Reference in New Issue