+++ /dev/null
-#include "muscle.h"\r
-\r
-#if defined(__linux__)\r
-#include <sys/time.h>\r
-#include <sys/resource.h>\r
-#include <unistd.h>\r
-#include <errno.h>\r
-#include <stdio.h>\r
-#include <fcntl.h>\r
-\r
-const int ONE_MB = 1000000;\r
-const int MEM_WARNING_THRESHOLD = 20*ONE_MB;\r
-\r
-double GetNAN()\r
- {\r
- static unsigned long nan[2]={0xffffffff, 0x7fffffff};\r
- double dNAN = *( double* )nan;\r
- return dNAN;\r
- }\r
-\r
-double g_dNAN = GetNAN();\r
-\r
-void chkmem(const char szMsg[])\r
- {\r
- //assert(_CrtCheckMemory());\r
- }\r
-\r
-void Break()\r
- {\r
- //DebugBreak();\r
- }\r
-\r
-static char szCmdLine[4096];\r
-\r
-void *ptrStartBreak = sbrk(0);\r
-\r
-const char *GetCmdLine()\r
- {\r
- return szCmdLine;\r
- }\r
-\r
-double GetMemUseMB()\r
- {\r
- static char statm[64];\r
- static int PageSize;\r
- if (0 == statm[0])\r
- {\r
- PageSize = sysconf(_SC_PAGESIZE);\r
- pid_t pid = getpid();\r
- sprintf(statm, "/proc/%d/statm", (int) pid);\r
- }\r
-\r
- int fd = open(statm, O_RDONLY);\r
- if (-1 == fd)\r
- return -1;\r
- char Buffer[64];\r
- int n = read(fd, Buffer, sizeof(Buffer) - 1);\r
- close(fd);\r
- fd = -1;\r
-\r
- if (n <= 0)\r
- {\r
- static bool Warned = false;\r
- if (!Warned)\r
- {\r
- Warned = true;\r
- Warning("*Warning* Cannot read %s errno=%d %s",\r
- statm, errno, strerror(errno));\r
- }\r
- return 0;\r
- }\r
- Buffer[n] = 0;\r
- int Pages = atoi(Buffer);\r
-\r
- return ((double) Pages * (double) PageSize)/1e6;\r
- }\r
-\r
-void SaveCmdLine(int argc, char *argv[])\r
- {\r
- for (int i = 0; i < argc; ++i)\r
- {\r
- if (i > 0)\r
- strcat(szCmdLine, " ");\r
- strcat(szCmdLine, argv[i]);\r
- }\r
- }\r
-\r
-double dPeakMemUseMB = 0;\r
-\r
-double GetPeakMemUseMB()\r
- {\r
- CheckMemUse();\r
- return dPeakMemUseMB;\r
- }\r
-\r
-double GetCPUGHz()\r
- {\r
- double dGHz = 2.5;\r
- const char *e = getenv("CPUGHZ");\r
- if (0 != e)\r
- dGHz = atof(e);\r
- return dGHz;\r
- }\r
-\r
-void CheckMemUse()\r
- {\r
- double dMB = GetMemUseMB();\r
- if (dMB > dPeakMemUseMB)\r
- dPeakMemUseMB = dMB;\r
- }\r
-\r
-double GetRAMSizeMB()\r
- {\r
- const double DEFAULT_RAM = 500;\r
- static double RAMMB = 0;\r
- if (RAMMB != 0)\r
- return RAMMB;\r
-\r
- int fd = open("/proc/meminfo", O_RDONLY);\r
- if (-1 == fd)\r
- {\r
- static bool Warned = false;\r
- if (!Warned)\r
- {\r
- Warned = true;\r
- Warning("*Warning* Cannot open /proc/meminfo errno=%d %s",\r
- errno, strerror(errno));\r
- }\r
- return DEFAULT_RAM;\r
- }\r
- char Buffer[1024];\r
- int n = read(fd, Buffer, sizeof(Buffer) - 1);\r
- close(fd);\r
- fd = -1;\r
-\r
- if (n <= 0)\r
- {\r
- static bool Warned = false;\r
- if (!Warned)\r
- {\r
- Warned = true;\r
- Warning("*Warning* Cannot read /proc/meminfo errno=%d %s",\r
- errno, strerror(errno));\r
- }\r
- return DEFAULT_RAM;\r
- }\r
- Buffer[n] = 0;\r
- char *pMem = strstr(Buffer, "MemTotal: ");\r
- if (0 == pMem)\r
- {\r
- static bool Warned = false;\r
- if (!Warned)\r
- {\r
- Warned = true;\r
- Warning("*Warning* 'MemTotal:' not found in /proc/meminfo");\r
- }\r
- return DEFAULT_RAM;\r
- }\r
- int Bytes = atoi(pMem+9)*1000;\r
- return ((double) Bytes)/1e6;\r
- }\r
-\r
-#endif // !WIN32\r