Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "rtabmap/utilite/UProcessInfo.h"
00021
00022 #ifdef _WIN32
00023 #include "Windows.h"
00024 #include "Psapi.h"
00025 #elif __APPLE__
00026 #include <sys/resource.h>
00027 #else
00028 #include <fstream>
00029 #include <stdlib.h>
00030 #include "rtabmap/utilite/UStl.h"
00031 #endif
00032
00033 UProcessInfo::UProcessInfo() {}
00034
00035 UProcessInfo::~UProcessInfo() {}
00036
00037
00038 long int UProcessInfo::getMemoryUsage()
00039 {
00040 long int memoryUsage = -1;
00041
00042 #ifdef _WIN32
00043 HANDLE hProc = GetCurrentProcess();
00044 PROCESS_MEMORY_COUNTERS info;
00045 BOOL okay = GetProcessMemoryInfo(hProc, &info, sizeof(info));
00046 if(okay)
00047 {
00048 memoryUsage = info.WorkingSetSize;
00049 }
00050 #elif __APPLE__
00051 rusage u;
00052 if(getrusage(RUSAGE_SELF, &u) == 0)
00053 {
00054 memoryUsage = u.ru_maxrss;
00055 }
00056 #else
00057 std::fstream file("/proc/self/status", std::fstream::in);
00058 if(file.is_open())
00059 {
00060 std::string bytes;
00061 while(std::getline(file, bytes))
00062 {
00063 if(bytes.find("VmRSS") != bytes.npos)
00064 {
00065 std::list<std::string> strs = uSplit(bytes, ' ');
00066 if(strs.size()>1)
00067 {
00068 memoryUsage = atol(uValueAt(strs,1).c_str()) * 1024;
00069 }
00070 break;
00071 }
00072 }
00073 file.close();
00074 }
00075 #endif
00076
00077 return memoryUsage;
00078 }