1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_SYSTEM_SYS_INFO_INTERNAL_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_SYSTEM_SYS_INFO_INTERNAL_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 9*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_APPLE) 12*6777b538SAndroid Build Coastguard Worker #include <optional> 13*6777b538SAndroid Build Coastguard Worker #endif 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace base { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker namespace internal { 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker template <typename T, T (*F)(void)> 20*6777b538SAndroid Build Coastguard Worker class LazySysInfoValue { 21*6777b538SAndroid Build Coastguard Worker public: LazySysInfoValue()22*6777b538SAndroid Build Coastguard Worker LazySysInfoValue() : value_(F()) {} 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker LazySysInfoValue(const LazySysInfoValue&) = delete; 25*6777b538SAndroid Build Coastguard Worker LazySysInfoValue& operator=(const LazySysInfoValue&) = delete; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker ~LazySysInfoValue() = default; 28*6777b538SAndroid Build Coastguard Worker value()29*6777b538SAndroid Build Coastguard Worker T value() { return value_; } 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker private: 32*6777b538SAndroid Build Coastguard Worker const T value_; 33*6777b538SAndroid Build Coastguard Worker }; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_MAC) 36*6777b538SAndroid Build Coastguard Worker // Exposed for testing. 37*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<int> NumberOfPhysicalProcessors(); 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker // When CPU security mitigation is enabled, return number of "physical" 40*6777b538SAndroid Build Coastguard Worker // cores and not the number of "logical" cores. CPU security mitigations 41*6777b538SAndroid Build Coastguard Worker // disables hyper-threading for the current application, which effectively 42*6777b538SAndroid Build Coastguard Worker // limits the number of concurrently executing threads to the number of 43*6777b538SAndroid Build Coastguard Worker // physical cores. 44*6777b538SAndroid Build Coastguard Worker std::optional<int> NumberOfProcessorsWhenCpuSecurityMitigationEnabled(); 45*6777b538SAndroid Build Coastguard Worker #endif 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_APPLE) 48*6777b538SAndroid Build Coastguard Worker std::optional<int> GetSysctlIntValue(const char* key_name); 49*6777b538SAndroid Build Coastguard Worker #endif 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker } // namespace internal 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker } // namespace base 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker #endif // BASE_SYSTEM_SYS_INFO_INTERNAL_H_ 56