From babdfafa52792a23f15feb1ddd86d337d27f87d7 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Thu, 13 Dec 2007 06:18:53 +0000 Subject: [PATCH] [SIGAR-37] Use libproc when possible for proc_time --- src/os/darwin/darwin_sigar.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/os/darwin/darwin_sigar.c b/src/os/darwin/darwin_sigar.c index 111f0d13..2747e052 100644 --- a/src/os/darwin/darwin_sigar.c +++ b/src/os/darwin/darwin_sigar.c @@ -924,9 +924,22 @@ static int get_proc_times(sigar_pid_t pid, sigar_proc_time_t *time) time_value_t utime = {0, 0}, stime = {0, 0}; task_basic_info_data_t ti; task_thread_times_info_data_t tti; - task_port_t task, self = mach_task_self(); + task_port_t task, self; kern_return_t status; - +# ifdef DARWIN_HAS_LIBPROC_H + struct proc_taskinfo pti; + int sz = + proc_pidinfo(pid, PROC_PIDTASKINFO, 0, &pti, sizeof(pti)); + + if (sz == sizeof(pti)) { + time->user = SIGAR_NSEC2MSEC(pti.pti_total_user); + time->sys = SIGAR_NSEC2MSEC(pti.pti_total_system); + time->total = time->user + time->sys; + return SIGAR_OK; + } +# endif + + self = mach_task_self(); status = task_for_pid(self, pid, &task); if (status != KERN_SUCCESS) { return errno;