task_impl::usage_info task_impl::process_task_data() { task_t task; auto ret = task_for_pid( mach_task_self(), m_pid, &task ); if( ret != KERN_SUCCESS ) { BOOST_THROW_EXCEPTION( err::sys_api_error() << err::description( fmt::format( "task_for_pid({}) failed", m_pid ) ) << err::mach_error( ret ) ); } struct task_basic_info_64 ti; mach_msg_type_number_t count; count = TASK_BASIC_INFO_64_COUNT; ret = task_info( task, TASK_BASIC_INFO_64, (task_info_t)&ti, &count ); if( ret != KERN_SUCCESS ) { BOOST_THROW_EXCEPTION( err::sys_api_error() << err::description( fmt::format( "task_info({}) failed", m_pid ) ) << err::mach_error( ret ) ); } m_real_mem_size = ti.resident_size; m_virtual_mem_size = ti.virtual_size; return std::make_tuple( to_timeval( ti.user_time ), to_timeval( ti.system_time ) ); }
static void add_time(ambit_date_time_t *intime, int32_t offset, ambit_date_time_t *outtime) { struct timeval timeval; struct tm *tm; to_timeval(intime, &timeval); if (offset >= 0) { timeval.tv_sec += offset / 1000; timeval.tv_usec += (offset % 1000)*1000; } else { timeval.tv_sec += offset / 1000; timeval.tv_usec -= (abs(offset) % 1000)*1000; } if (timeval.tv_usec >= 1000000) { timeval.tv_sec++; timeval.tv_usec -= 1000000; } if(timeval.tv_usec < 0) { timeval.tv_sec--; timeval.tv_usec += 1000000; } tm = gmtime(&timeval.tv_sec); outtime->msec = tm->tm_sec * 1000 + (timeval.tv_usec / 1000); outtime->minute = tm->tm_min; outtime->hour = tm->tm_hour; outtime->day = tm->tm_mday; outtime->month = tm->tm_mon; outtime->year = tm->tm_year; }
/* provide a function to hide the libc weak alias */ int gettimeofday(struct timeval *tv, ...) { to_timeval(transform(now()), tv); return 0; }