1*f6dc9357SAndroid Build Coastguard Worker // Windows/System.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_WINDOWS_SYSTEM_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_WINDOWS_SYSTEM_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #ifndef _WIN32 7*f6dc9357SAndroid Build Coastguard Worker // #include <sched.h> 8*f6dc9357SAndroid Build Coastguard Worker #include "../../C/Threads.h" 9*f6dc9357SAndroid Build Coastguard Worker #endif 10*f6dc9357SAndroid Build Coastguard Worker 11*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyTypes.h" 12*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyWindows.h" 13*f6dc9357SAndroid Build Coastguard Worker 14*f6dc9357SAndroid Build Coastguard Worker namespace NWindows { 15*f6dc9357SAndroid Build Coastguard Worker namespace NSystem { 16*f6dc9357SAndroid Build Coastguard Worker 17*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32 18*f6dc9357SAndroid Build Coastguard Worker 19*f6dc9357SAndroid Build Coastguard Worker UInt32 CountAffinity(DWORD_PTR mask); 20*f6dc9357SAndroid Build Coastguard Worker 21*f6dc9357SAndroid Build Coastguard Worker struct CProcessAffinity 22*f6dc9357SAndroid Build Coastguard Worker { 23*f6dc9357SAndroid Build Coastguard Worker // UInt32 numProcessThreads; 24*f6dc9357SAndroid Build Coastguard Worker // UInt32 numSysThreads; 25*f6dc9357SAndroid Build Coastguard Worker DWORD_PTR processAffinityMask; 26*f6dc9357SAndroid Build Coastguard Worker DWORD_PTR systemAffinityMask; 27*f6dc9357SAndroid Build Coastguard Worker InitSTCProcessAffinity28*f6dc9357SAndroid Build Coastguard Worker void InitST() 29*f6dc9357SAndroid Build Coastguard Worker { 30*f6dc9357SAndroid Build Coastguard Worker // numProcessThreads = 1; 31*f6dc9357SAndroid Build Coastguard Worker // numSysThreads = 1; 32*f6dc9357SAndroid Build Coastguard Worker processAffinityMask = 1; 33*f6dc9357SAndroid Build Coastguard Worker systemAffinityMask = 1; 34*f6dc9357SAndroid Build Coastguard Worker } 35*f6dc9357SAndroid Build Coastguard Worker CpuZeroCProcessAffinity36*f6dc9357SAndroid Build Coastguard Worker void CpuZero() 37*f6dc9357SAndroid Build Coastguard Worker { 38*f6dc9357SAndroid Build Coastguard Worker processAffinityMask = 0; 39*f6dc9357SAndroid Build Coastguard Worker } 40*f6dc9357SAndroid Build Coastguard Worker CpuSetCProcessAffinity41*f6dc9357SAndroid Build Coastguard Worker void CpuSet(unsigned cpuIndex) 42*f6dc9357SAndroid Build Coastguard Worker { 43*f6dc9357SAndroid Build Coastguard Worker processAffinityMask |= ((DWORD_PTR)1 << cpuIndex); 44*f6dc9357SAndroid Build Coastguard Worker } 45*f6dc9357SAndroid Build Coastguard Worker GetNumProcessThreadsCProcessAffinity46*f6dc9357SAndroid Build Coastguard Worker UInt32 GetNumProcessThreads() const { return CountAffinity(processAffinityMask); } GetNumSystemThreadsCProcessAffinity47*f6dc9357SAndroid Build Coastguard Worker UInt32 GetNumSystemThreads() const { return CountAffinity(systemAffinityMask); } 48*f6dc9357SAndroid Build Coastguard Worker 49*f6dc9357SAndroid Build Coastguard Worker BOOL Get(); 50*f6dc9357SAndroid Build Coastguard Worker SetProcAffinityCProcessAffinity51*f6dc9357SAndroid Build Coastguard Worker BOOL SetProcAffinity() const 52*f6dc9357SAndroid Build Coastguard Worker { 53*f6dc9357SAndroid Build Coastguard Worker return SetProcessAffinityMask(GetCurrentProcess(), processAffinityMask); 54*f6dc9357SAndroid Build Coastguard Worker } 55*f6dc9357SAndroid Build Coastguard Worker }; 56*f6dc9357SAndroid Build Coastguard Worker 57*f6dc9357SAndroid Build Coastguard Worker 58*f6dc9357SAndroid Build Coastguard Worker #else // WIN32 59*f6dc9357SAndroid Build Coastguard Worker 60*f6dc9357SAndroid Build Coastguard Worker struct CProcessAffinity 61*f6dc9357SAndroid Build Coastguard Worker { 62*f6dc9357SAndroid Build Coastguard Worker UInt32 numSysThreads; 63*f6dc9357SAndroid Build Coastguard Worker 64*f6dc9357SAndroid Build Coastguard Worker UInt32 GetNumSystemThreads() const { return (UInt32)numSysThreads; } 65*f6dc9357SAndroid Build Coastguard Worker BOOL Get(); 66*f6dc9357SAndroid Build Coastguard Worker 67*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_AFFINITY_SUPPORTED 68*f6dc9357SAndroid Build Coastguard Worker 69*f6dc9357SAndroid Build Coastguard Worker CCpuSet cpu_set; 70*f6dc9357SAndroid Build Coastguard Worker 71*f6dc9357SAndroid Build Coastguard Worker void InitST() 72*f6dc9357SAndroid Build Coastguard Worker { 73*f6dc9357SAndroid Build Coastguard Worker numSysThreads = 1; 74*f6dc9357SAndroid Build Coastguard Worker CpuSet_Zero(&cpu_set); 75*f6dc9357SAndroid Build Coastguard Worker CpuSet_Set(&cpu_set, 0); 76*f6dc9357SAndroid Build Coastguard Worker } 77*f6dc9357SAndroid Build Coastguard Worker 78*f6dc9357SAndroid Build Coastguard Worker UInt32 GetNumProcessThreads() const { return (UInt32)CPU_COUNT(&cpu_set); } 79*f6dc9357SAndroid Build Coastguard Worker void CpuZero() { CpuSet_Zero(&cpu_set); } 80*f6dc9357SAndroid Build Coastguard Worker void CpuSet(unsigned cpuIndex) { CpuSet_Set(&cpu_set, cpuIndex); } 81*f6dc9357SAndroid Build Coastguard Worker int IsCpuSet(unsigned cpuIndex) const { return CpuSet_IsSet(&cpu_set, cpuIndex); } 82*f6dc9357SAndroid Build Coastguard Worker // void CpuClr(int cpuIndex) { CPU_CLR(cpuIndex, &cpu_set); } 83*f6dc9357SAndroid Build Coastguard Worker 84*f6dc9357SAndroid Build Coastguard Worker BOOL SetProcAffinity() const 85*f6dc9357SAndroid Build Coastguard Worker { 86*f6dc9357SAndroid Build Coastguard Worker return sched_setaffinity(0, sizeof(cpu_set), &cpu_set) == 0; 87*f6dc9357SAndroid Build Coastguard Worker } 88*f6dc9357SAndroid Build Coastguard Worker 89*f6dc9357SAndroid Build Coastguard Worker #else // Z7_AFFINITY_SUPPORTED 90*f6dc9357SAndroid Build Coastguard Worker 91*f6dc9357SAndroid Build Coastguard Worker void InitST() 92*f6dc9357SAndroid Build Coastguard Worker { 93*f6dc9357SAndroid Build Coastguard Worker numSysThreads = 1; 94*f6dc9357SAndroid Build Coastguard Worker } 95*f6dc9357SAndroid Build Coastguard Worker 96*f6dc9357SAndroid Build Coastguard Worker UInt32 GetNumProcessThreads() const 97*f6dc9357SAndroid Build Coastguard Worker { 98*f6dc9357SAndroid Build Coastguard Worker return numSysThreads; 99*f6dc9357SAndroid Build Coastguard Worker /* 100*f6dc9357SAndroid Build Coastguard Worker UInt32 num = 0; 101*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0; i < sizeof(cpu_set) * 8; i++) 102*f6dc9357SAndroid Build Coastguard Worker num += (UInt32)((cpu_set >> i) & 1); 103*f6dc9357SAndroid Build Coastguard Worker return num; 104*f6dc9357SAndroid Build Coastguard Worker */ 105*f6dc9357SAndroid Build Coastguard Worker } 106*f6dc9357SAndroid Build Coastguard Worker 107*f6dc9357SAndroid Build Coastguard Worker void CpuZero() { } 108*f6dc9357SAndroid Build Coastguard Worker void CpuSet(unsigned /* cpuIndex */) { /* UNUSED_VAR(cpuIndex) */ } 109*f6dc9357SAndroid Build Coastguard Worker int IsCpuSet(unsigned cpuIndex) const { return (cpuIndex < numSysThreads) ? 1 : 0; } 110*f6dc9357SAndroid Build Coastguard Worker 111*f6dc9357SAndroid Build Coastguard Worker BOOL SetProcAffinity() const 112*f6dc9357SAndroid Build Coastguard Worker { 113*f6dc9357SAndroid Build Coastguard Worker errno = ENOSYS; 114*f6dc9357SAndroid Build Coastguard Worker return FALSE; 115*f6dc9357SAndroid Build Coastguard Worker } 116*f6dc9357SAndroid Build Coastguard Worker 117*f6dc9357SAndroid Build Coastguard Worker #endif // Z7_AFFINITY_SUPPORTED 118*f6dc9357SAndroid Build Coastguard Worker }; 119*f6dc9357SAndroid Build Coastguard Worker 120*f6dc9357SAndroid Build Coastguard Worker #endif // _WIN32 121*f6dc9357SAndroid Build Coastguard Worker 122*f6dc9357SAndroid Build Coastguard Worker 123*f6dc9357SAndroid Build Coastguard Worker UInt32 GetNumberOfProcessors(); 124*f6dc9357SAndroid Build Coastguard Worker 125*f6dc9357SAndroid Build Coastguard Worker bool GetRamSize(size_t &size); // returns false, if unknown ram size 126*f6dc9357SAndroid Build Coastguard Worker 127*f6dc9357SAndroid Build Coastguard Worker unsigned long Get_File_OPEN_MAX(); 128*f6dc9357SAndroid Build Coastguard Worker unsigned Get_File_OPEN_MAX_Reduced_for_3_tasks(); 129*f6dc9357SAndroid Build Coastguard Worker 130*f6dc9357SAndroid Build Coastguard Worker }} 131*f6dc9357SAndroid Build Coastguard Worker 132*f6dc9357SAndroid Build Coastguard Worker #endif 133