Ejemplo n.º 1
0
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 ) );
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
/* provide a function to hide the libc weak alias */
int gettimeofday(struct timeval *tv, ...)
{
    to_timeval(transform(now()), tv);
    return 0;
}