/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 1990 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #pragma ident "%Z%%M% %I% %E% SMI" #include #include /* * Backwards compatible vtimes. */ struct vtimes { int vm_utime; /* user time (60'ths) */ int vm_stime; /* system time (60'ths) */ /* divide next two by utime+stime to get averages */ unsigned vm_idsrss; /* integral of d+s rss */ unsigned vm_ixrss; /* integral of text rss */ int vm_maxrss; /* maximum rss */ int vm_majflt; /* major page faults */ int vm_minflt; /* minor page faults */ int vm_nswap; /* number of swaps */ int vm_inblk; /* block reads */ int vm_oublk; /* block writes */ }; static void getvtimes(struct rusage *, struct vtimes *); static int scale60(struct timeval *); int vtimes(struct vtimes *par, struct vtimes *chi) { struct rusage ru; if (par) { if (getrusage(RUSAGE_SELF, &ru) < 0) return (-1); getvtimes(&ru, par); } if (chi) { if (getrusage(RUSAGE_CHILDREN, &ru) < 0) return (-1); getvtimes(&ru, chi); } return (0); } static void getvtimes(struct rusage *aru, struct vtimes *avt) { avt->vm_utime = scale60(&aru->ru_utime); avt->vm_stime = scale60(&aru->ru_stime); avt->vm_idsrss = ((aru->ru_idrss+aru->ru_isrss) / 100) * 60; avt->vm_ixrss = aru->ru_ixrss / 100 * 60; avt->vm_maxrss = aru->ru_maxrss; avt->vm_majflt = aru->ru_majflt; avt->vm_minflt = aru->ru_minflt; avt->vm_nswap = aru->ru_nswap; avt->vm_inblk = aru->ru_inblock; avt->vm_oublk = aru->ru_oublock; } static int scale60(struct timeval *tvp) { return (tvp->tv_sec * 60 + tvp->tv_usec / 16667); }