xref: /aosp_15_r20/external/lzma/CPP/Windows/System.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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