pxar
 All Classes Namespaces Functions Variables Typedefs Friends
rsstools.cc
1 #include "rsstools.hh"
2 
3 // ----------------------------------------------------------------------
4 rsstools::rsstools() {
5 }
6 
7 // ----------------------------------------------------------------------
8 rsstools::~rsstools() {
9 }
10 
11 
18 {
19 #if defined(WIN32)
20  /* Windows -------------------------------------------------- */
21  PROCESS_MEMORY_COUNTERS info;
22  GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) );
23  return (size_t)info.PeakWorkingSetSize;
24 
25 #elif (defined(_AIX) || defined(__TOS__AIX__)) || (defined(__sun__) || defined(__sun) || defined(sun) && (defined(__SVR4) || defined(__svr4__)))
26  /* AIX and Solaris ------------------------------------------ */
27  struct psinfo psinfo;
28  int fd = -1;
29  if ( (fd = open( "/proc/self/psinfo", O_RDONLY )) == -1 )
30  return (size_t)0L; /* Can't open? */
31  if ( read( fd, &psinfo, sizeof(psinfo) ) != sizeof(psinfo) )
32  {
33  close( fd );
34  return (size_t)0L; /* Can't read? */
35  }
36  close( fd );
37  return (size_t)(psinfo.pr_rssize * 1024L);
38 
39 #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__))
40  /* BSD, Linux, and OSX -------------------------------------- */
41  struct rusage rusage;
42  getrusage( RUSAGE_SELF, &rusage );
43 #if defined(__APPLE__) && defined(__MACH__)
44  return (size_t)rusage.ru_maxrss;
45 #else
46  return (size_t)(rusage.ru_maxrss * 1024L);
47 #endif
48 
49 #else
50  /* Unknown OS ----------------------------------------------- */
51  return (size_t)0L; /* Unsupported. */
52 #endif
53 }
54 
60 {
61 #if defined(WIN32)
62  /* Windows -------------------------------------------------- */
63  PROCESS_MEMORY_COUNTERS info;
64  GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) );
65  return (size_t)info.WorkingSetSize;
66 
67 #elif defined(__APPLE__) && defined(__MACH__)
68  /* OSX ------------------------------------------------------ */
69  struct mach_task_basic_info info;
70  mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT;
71  if ( task_info( mach_task_self( ), MACH_TASK_BASIC_INFO,
72  (task_info_t)&info, &infoCount ) != KERN_SUCCESS )
73  return (size_t)0L; /* Can't access? */
74  return (size_t)info.resident_size;
75 
76 #elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__)
77  /* Linux ---------------------------------------------------- */
78  long rss = 0L;
79  FILE* fp = NULL;
80  if ( (fp = fopen( "/proc/self/statm", "r" )) == NULL )
81  return (size_t)0L; /* Can't open? */
82  if ( fscanf( fp, "%*s%ld", &rss ) != 1 )
83  {
84  fclose( fp );
85  return (size_t)0L; /* Can't read? */
86  }
87  fclose( fp );
88  return (size_t)rss * (size_t)sysconf( _SC_PAGESIZE);
89 
90 #else
91  /* AIX, BSD, Solaris, and Unknown OS ------------------------ */
92  return (size_t)0L; /* Unsupported. */
93 #endif
94 }
95 
96 
size_t getPeakRSS()
Definition: rsstools.cc:17
size_t getCurrentRSS()
Definition: rsstools.cc:59