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