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)38 Size 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