xref: /original-bsd/lib/libcompat/4.1/vtimes.c (revision 0bd63870)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #if defined(LIBC_SCCS) && !defined(lint)
8 static char sccsid[] = "@(#)vtimes.c	5.3 (Berkeley) 02/24/91";
9 #endif LIBC_SCCS and not lint
10 
11 #include <sys/time.h>
12 #include <sys/resource.h>
13 
14 /*
15  * Backwards compatible vtimes.
16  */
17 struct vtimes {
18 	int	vm_utime;		/* user time (60'ths) */
19 	int	vm_stime;		/* system time (60'ths) */
20 	/* divide next two by utime+stime to get averages */
21 	unsigned vm_idsrss;		/* integral of d+s rss */
22 	unsigned vm_ixrss;		/* integral of text rss */
23 	int	vm_maxrss;		/* maximum rss */
24 	int	vm_majflt;		/* major page faults */
25 	int	vm_minflt;		/* minor page faults */
26 	int	vm_nswap;		/* number of swaps */
27 	int	vm_inblk;		/* block reads */
28 	int	vm_oublk;		/* block writes */
29 };
30 
31 vtimes(par, chi)
32 	register struct vtimes *par, *chi;
33 {
34 	struct rusage ru;
35 	static int getvtimes();
36 
37 	if (par) {
38 		if (getrusage(RUSAGE_SELF, &ru) < 0)
39 			return (-1);
40 		getvtimes(&ru, par);
41 	}
42 	if (chi) {
43 		if (getrusage(RUSAGE_CHILDREN, &ru) < 0)
44 			return (-1);
45 		getvtimes(&ru, chi);
46 	}
47 	return (0);
48 }
49 
50 static
51 getvtimes(aru, avt)
52 	register struct rusage *aru;
53 	register struct vtimes *avt;
54 {
55 	static int scale60();
56 
57 	avt->vm_utime = scale60(&aru->ru_utime);
58 	avt->vm_stime = scale60(&aru->ru_stime);
59 	avt->vm_idsrss = ((aru->ru_idrss+aru->ru_isrss) / 100) * 60;
60 	avt->vm_ixrss = aru->ru_ixrss / 100 * 60;
61 	avt->vm_maxrss = aru->ru_maxrss;
62 	avt->vm_majflt = aru->ru_majflt;
63 	avt->vm_minflt = aru->ru_minflt;
64 	avt->vm_nswap = aru->ru_nswap;
65 	avt->vm_inblk = aru->ru_inblock;
66 	avt->vm_oublk = aru->ru_oublock;
67 }
68 
69 static
70 scale60(tvp)
71 	register struct timeval *tvp;
72 {
73 	return (tvp->tv_sec * 60 + tvp->tv_usec / 16667);
74 }
75