diff options
| author | Callum Linden <113564339+callumlinden@users.noreply.github.com> | 2025-09-04 14:51:34 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-04 14:51:34 -0700 |
| commit | 66ccfabdd39a8a54a94d5dbf15364ff7f94a13c2 (patch) | |
| tree | fae8bca7bb3f3ac05972803e2fefc05de8542408 /indra/llcommon/llprocessor.cpp | |
| parent | 0ae3de8f1e78dc74914ea70e725c8324390f3e97 (diff) | |
| parent | 90aa693f2a9ece9f1c624dba245f202e126bca5b (diff) | |
Merge branch 'project/mac_universal' into callum/viewer-cef-2025-08
Diffstat (limited to 'indra/llcommon/llprocessor.cpp')
| -rw-r--r-- | indra/llcommon/llprocessor.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp index 2e94651083..718f471321 100644 --- a/indra/llcommon/llprocessor.cpp +++ b/indra/llcommon/llprocessor.cpp @@ -628,6 +628,8 @@ private: #elif LL_DARWIN +#include <CoreFoundation/CoreFoundation.h> +#include <IOKit/IOKitLib.h> #include <mach/machine.h> #include <sys/sysctl.h> @@ -638,25 +640,21 @@ public: { getCPUIDInfo(); uint64_t frequency = getSysctlInt64("hw.cpufrequency"); - if (!frequency) + if (frequency == 0) // fallback to clockrate and tbfrequency { - auto tbfrequency = getSysctlInt64("hw.tbfrequency"); - struct clockinfo clockrate; - auto clockrate_len = sizeof(clockrate); - if (!sysctlbyname("kern.clockrate", &clockrate, &clockrate_len, NULL, 0)) - frequency = tbfrequency * clockrate.hz; + frequency = getSysctlClockrate() * getSysctlInt64("hw.tbfrequency"); } setInfo(eFrequency, (F64)frequency / (F64)1000000); } - virtual ~LLProcessorInfoDarwinImpl() {} + virtual ~LLProcessorInfoDarwinImpl() = default; private: int getSysctlInt(const char* name) { int result = 0; size_t len = sizeof(int); - int error = sysctlbyname(name, (void*)&result, &len, NULL, 0); + int error = sysctlbyname(name, (void*)&result, &len, nullptr, 0); return error == -1 ? 0 : result; } @@ -664,7 +662,7 @@ private: { uint64_t value = 0; size_t size = sizeof(value); - int result = sysctlbyname(name, (void*)&value, &size, NULL, 0); + int result = sysctlbyname(name, (void*)&value, &size, nullptr, 0); if ( result == 0 ) { if ( size == sizeof( uint64_t ) ) @@ -684,6 +682,14 @@ private: return result == -1 ? 0 : value; } + uint64_t getSysctlClockrate() + { + struct clockinfo clockrate{}; + size_t size = sizeof(clockrate); + int error = sysctlbyname("kern.clockrate", &clockrate, &size, nullptr, 0); + return error == -1 ? 0 : clockrate.hz; + } + void getCPUIDInfo() { size_t len = 0; |
