Next version of JABA
[jabaws.git] / binaries / src / muscle / globalswin32.cpp
1 #include "muscle.h"\r
2 \r
3 #if     WIN32\r
4 #include <windows.h>\r
5 #include <crtdbg.h>\r
6 #include <psapi.h>\r
7 #include <float.h>\r
8 #include <stdio.h>\r
9 \r
10 void DebugPrintf(const char *szFormat, ...)\r
11         {\r
12         va_list ArgList;\r
13         char szStr[4096];\r
14 \r
15         va_start(ArgList, szFormat);\r
16         vsprintf(szStr, szFormat, ArgList);\r
17 \r
18         OutputDebugString(szStr);\r
19         }\r
20 \r
21 double GetNAN()\r
22         {\r
23         static unsigned long nan[2]={0xffffffff, 0x7fffffff};\r
24         double dNAN = *( double* )nan;\r
25         assert(_isnan(dNAN));\r
26         return dNAN;\r
27         }\r
28 \r
29 double g_dNAN = GetNAN();\r
30 \r
31 void chkmem(const char szMsg[])\r
32         {\r
33         if (!_CrtCheckMemory())\r
34                 Quit("chkmem(%s)", szMsg);\r
35         }\r
36 \r
37 void Break()\r
38         {\r
39         if (IsDebuggerPresent())\r
40                 DebugBreak();\r
41         }\r
42 \r
43 const char *GetCmdLine()\r
44         {\r
45         return GetCommandLine();\r
46         }\r
47 \r
48 static unsigned uPeakMemUseBytes;\r
49 \r
50 double GetRAMSizeMB()\r
51         {\r
52         MEMORYSTATUS MS;\r
53         GlobalMemoryStatus(&MS);\r
54         return MS.dwAvailPhys/1e6;\r
55         }\r
56 \r
57 double GetMemUseMB()\r
58         {\r
59         HANDLE hProc = GetCurrentProcess();\r
60         PROCESS_MEMORY_COUNTERS PMC;\r
61         BOOL bOk = GetProcessMemoryInfo(hProc, &PMC, sizeof(PMC));\r
62         assert(bOk);\r
63         //printf("GetMemUseMB()\n");\r
64         //printf("%12u  PageFaultCount\n", (unsigned) PMC.PageFaultCount);\r
65         //printf("%12u  PagefileUsage\n", (unsigned) PMC.PagefileUsage);\r
66         //printf("%12u  PeakPagefileUsage\n", (unsigned) PMC.PeakPagefileUsage);\r
67         //printf("%12u  WorkingSetSize\n", (unsigned) PMC.WorkingSetSize);\r
68         //printf("%12u  PeakWorkingSetSize\n", (unsigned) PMC.PeakWorkingSetSize);\r
69         //printf("%12u  QuotaPagedPoolUsage\n", (unsigned) PMC.QuotaPagedPoolUsage);\r
70         //printf("%12u  QuotaPeakPagedPoolUsage\n", (unsigned) PMC.QuotaPeakPagedPoolUsage);\r
71         //printf("%12u  QuotaNonPagedPoolUsage\n", (unsigned) PMC.QuotaNonPagedPoolUsage);\r
72         //printf("%12u  QuotaPeakNonPagedPoolUsage\n", (unsigned) PMC.QuotaPeakNonPagedPoolUsage);\r
73         unsigned uBytes = (unsigned) PMC.WorkingSetSize;\r
74         if (uBytes > uPeakMemUseBytes)\r
75                 uPeakMemUseBytes = uBytes;\r
76         return (uBytes + 500000.0)/1000000.0;\r
77         }\r
78 \r
79 double GetPeakMemUseMB()\r
80         {\r
81         return (uPeakMemUseBytes + 500000.0)/1000000.0;\r
82         }\r
83 \r
84 void CheckMemUse()\r
85         {\r
86 // Side-effect: sets peak usage in uPeakMemUseBytes\r
87         GetMemUseMB();\r
88         }\r
89 \r
90 double GetCPUGHz()\r
91         {\r
92         double dGHz = 2.5;\r
93         const char *e = getenv("CPUGHZ");\r
94         if (0 != e)\r
95                 dGHz = atof(e);\r
96         if (dGHz < 0.1 || dGHz > 1000.0)\r
97                 Quit("Invalid value '%s' for environment variable CPUGHZ", e);\r
98         return dGHz;\r
99         }\r
100 #endif  // WIN32\r