1 2 /* Web Polygraph http://www.web-polygraph.org/ 3 * Copyright 2003-2011 The Measurement Factory 4 * Licensed under the Apache License, Version 2.0 */ 5 6 #ifndef POLYGRAPH__XSTD_H_SYS_RESOURCE_H 7 #define POLYGRAPH__XSTD_H_SYS_RESOURCE_H 8 9 #include "xstd/Time.h" 10 #include "xstd/Size.h" 11 #include "xstd/h/os_std.h" 12 13 #ifdef HAVE_SYS_RESOURCE_H 14 #include <sys/resource.h> 15 #endif 16 17 #ifdef HAVE_SYS_PARAM_H 18 #include <sys/param.h> /* for BSD4_4 to be defined */ 19 #endif 20 21 #ifndef HAVE_TYPE_RUSAGE 22 // fake structure 23 struct rusage { 24 timeval ru_stime; 25 timeval ru_utime; 26 long ru_maxrss; 27 long ru_majflt; 28 long other[16]; 29 }; 30 #elif defined(CFG_HOS_SGI) && _ABIAPI 31 # define ru_maxrss ru_pad[0] 32 # define ru_majflt ru_pad[5] 33 #endif 34 35 36 // some platforms define maxrss in KBytes, some in pages 37 inline MaxRss2Size(long maxrss)38Size MaxRss2Size(long maxrss) { 39 int kb = -1; 40 #if defined(CFG_HOS_SGI) 41 kb = maxrss; 42 #elif defined(CFG_HOS_OSF) 43 kb = maxrss; 44 #elif defined(BSD4_4) 45 kb = maxrss; 46 #elif defined(HAVE_GETPAGESIZE) 47 kb = (maxrss * ::getpagesize()) / 1024; 48 #elif defined(PAGESIZE) 49 kb = (maxrss * PAGESIZE) / 1024; 50 #else 51 kb = maxrss; 52 #endif 53 return Size::KB(kb); 54 } 55 56 57 #endif 58