From 00f8861596096f9e1dc804ecdb9ed3ff98a5d43a Mon Sep 17 00:00:00 2001 From: kervala Date: Wed, 27 Jan 2016 14:44:13 +0100 Subject: [PATCH] Fixed: Only call setCPUMask once --- code/ryzom/client/src/client_cfg.cpp | 53 ---------------------------- code/ryzom/client/src/init.cpp | 49 +++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 53 deletions(-) diff --git a/code/ryzom/client/src/client_cfg.cpp b/code/ryzom/client/src/client_cfg.cpp index 83f73afae..2e1bbdca4 100644 --- a/code/ryzom/client/src/client_cfg.cpp +++ b/code/ryzom/client/src/client_cfg.cpp @@ -254,43 +254,6 @@ extern NL3D::UDriver *Driver; extern CRyzomTime RT; extern string Cookie; extern string FSAddr; - -extern uint64 Debug_OldCPUMask; -extern uint64 Debug_NewCPUMask; - -// For multi cpu, active only one CPU for the main thread -void setCPUMask(uint64 userCPUMask) -{ - uint64 cpuMask = IProcess::getCurrentProcess()->getCPUMask(); - Debug_OldCPUMask = cpuMask; - - // if user CPU mask is valid - if (cpuMask & userCPUMask) - { - // use it - IProcess::getCurrentProcess ()->setCPUMask(cpuMask & userCPUMask); - } - else - { - // else get first available CPU - - // get the processor to allow process - uint i = 0; - while ((i < 64) && ((cpuMask & (UINT64_CONSTANT(1) << i)) == 0)) - i++; - - // Set the CPU mask - if (i < 64) - { - IProcess::getCurrentProcess ()->setCPUMask(UINT64_CONSTANT(1) << i); - } - } - - // check - cpuMask = IProcess::getCurrentProcess ()->getCPUMask(); - Debug_NewCPUMask = cpuMask; -} - #endif ///////////// @@ -1713,22 +1676,6 @@ void CClientConfig::setValues() SetPriorityClass (GetCurrentProcess(), priority[index]); #endif // NL_OS_WINDOWS - sint cpuMask; - - if (ClientCfg.CPUMask < 1) - { - CTime::CTimerInfo timerInfo; - NLMISC::CTime::probeTimerInfo(timerInfo); - - cpuMask = timerInfo.RequiresSingleCore ? 1:0; - } - else - { - cpuMask = ClientCfg.CPUMask; - } - - if (cpuMask) setCPUMask(cpuMask); - // Init Verbose Modes (at the beginning to be able to display them as soon as possible). ::VerboseVP = ClientCfg.VerboseVP; ::VerboseAnimUser = ClientCfg.VerboseAnimUser; diff --git a/code/ryzom/client/src/init.cpp b/code/ryzom/client/src/init.cpp index 94376cd3f..8daabdaa5 100644 --- a/code/ryzom/client/src/init.cpp +++ b/code/ryzom/client/src/init.cpp @@ -378,6 +378,39 @@ void outOfMemory() uint64 Debug_OldCPUMask = 0; uint64 Debug_NewCPUMask = 0; +// For multi cpu, active only one CPU for the main thread +void setCPUMask(uint64 userCPUMask) +{ + uint64 cpuMask = IProcess::getCurrentProcess()->getCPUMask(); + Debug_OldCPUMask = cpuMask; + + // if user CPU mask is valid + if (cpuMask & userCPUMask) + { + // use it + IProcess::getCurrentProcess ()->setCPUMask(cpuMask & userCPUMask); + } + else + { + // else get first available CPU + + // get the processor to allow process + uint i = 0; + while ((i < 64) && ((cpuMask & (UINT64_CONSTANT(1) << i)) == 0)) + i++; + + // Set the CPU mask + if (i < 64) + { + IProcess::getCurrentProcess ()->setCPUMask(UINT64_CONSTANT(1) << i); + } + } + + // check + cpuMask = IProcess::getCurrentProcess ()->getCPUMask(); + Debug_NewCPUMask = cpuMask; +} + void displayCPUInfo() { nlinfo("CPUInfo: CPUMask before change: %x, after change: %x, CPUID: %x, hasHyperThreading: %s", (uint32)Debug_OldCPUMask, (uint32)Debug_NewCPUMask, CSystemInfo::getCPUID(), (CSystemInfo::hasHyperThreading()?"YES":"NO")); @@ -836,6 +869,22 @@ void prelogInit() ClientCfg.init(ConfigFileName); CLoginProgressPostThread::getInstance().init(ClientCfg.ConfigFile); + sint cpuMask; + + if (ClientCfg.CPUMask < 1) + { + CTime::CTimerInfo timerInfo; + NLMISC::CTime::probeTimerInfo(timerInfo); + + cpuMask = timerInfo.RequiresSingleCore ? 1:0; + } + else + { + cpuMask = ClientCfg.CPUMask; + } + + if (cpuMask) setCPUMask(cpuMask); + setCrashCallback(crashCallback); // Display Some Info On CPU