Fixed: Only call setCPUMask once
This commit is contained in:
parent
8b24d6d0cb
commit
00f8861596
2 changed files with 49 additions and 53 deletions
|
@ -254,43 +254,6 @@ extern NL3D::UDriver *Driver;
|
||||||
extern CRyzomTime RT;
|
extern CRyzomTime RT;
|
||||||
extern string Cookie;
|
extern string Cookie;
|
||||||
extern string FSAddr;
|
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
|
#endif
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
|
@ -1713,22 +1676,6 @@ void CClientConfig::setValues()
|
||||||
SetPriorityClass (GetCurrentProcess(), priority[index]);
|
SetPriorityClass (GetCurrentProcess(), priority[index]);
|
||||||
#endif // NL_OS_WINDOWS
|
#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).
|
// Init Verbose Modes (at the beginning to be able to display them as soon as possible).
|
||||||
::VerboseVP = ClientCfg.VerboseVP;
|
::VerboseVP = ClientCfg.VerboseVP;
|
||||||
::VerboseAnimUser = ClientCfg.VerboseAnimUser;
|
::VerboseAnimUser = ClientCfg.VerboseAnimUser;
|
||||||
|
|
|
@ -378,6 +378,39 @@ void outOfMemory()
|
||||||
uint64 Debug_OldCPUMask = 0;
|
uint64 Debug_OldCPUMask = 0;
|
||||||
uint64 Debug_NewCPUMask = 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()
|
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"));
|
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);
|
ClientCfg.init(ConfigFileName);
|
||||||
CLoginProgressPostThread::getInstance().init(ClientCfg.ConfigFile);
|
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);
|
setCrashCallback(crashCallback);
|
||||||
|
|
||||||
// Display Some Info On CPU
|
// Display Some Info On CPU
|
||||||
|
|
Loading…
Reference in a new issue