use crate::binding::{host_statistics64, mach_host_self};
use crate::cpu::{host_cpu_load_info, CpuTimes};
use mach::mach_port::mach_port_deallocate;
use mach::traps::mach_task_self;
use mach::vm_types::integer_t;
use std::io::Error;
pub fn get_cputimes() -> Result<CpuTimes, Error> {
let count = 4u32;
let port = unsafe { mach_host_self() };
let mut stats = std::mem::MaybeUninit::<host_cpu_load_info>::uninit();
let result =
unsafe { host_statistics64(port, 3, stats.as_mut_ptr() as *mut integer_t, &count) };
if unsafe { mach_port_deallocate(mach_task_self(), port) } != 0 || result != 0 {
return Err(Error::last_os_error());
}
let stats = unsafe { stats.assume_init() };
Ok(stats.into())
}
pub fn get_each_cputimes() -> Result<Vec<CpuTimes>, Error> {
Ok(Vec::new())
}