use crate::CpuError;
const QOS_CLASS_USER_INTERACTIVE: u32 = 0x21;
const QOS_CLASS_DEFAULT: u32 = 0x15;
const QOS_CLASS_BACKGROUND: u32 = 0x09;
extern "C" {
fn pthread_set_qos_class_self_np(qos_class: u32, relative_priority: i32) -> i32;
}
pub fn pin_p_core() -> crate::Result<()> {
let rc = unsafe { pthread_set_qos_class_self_np(QOS_CLASS_USER_INTERACTIVE, 0) };
if rc != 0 {
return Err(CpuError::AffinityFailed(format!(
"pthread_set_qos_class_self_np(USER_INTERACTIVE) returned {rc}"
)));
}
Ok(())
}
pub fn pin_e_core() -> crate::Result<()> {
let rc = unsafe { pthread_set_qos_class_self_np(QOS_CLASS_BACKGROUND, 0) };
if rc != 0 {
return Err(CpuError::AffinityFailed(format!(
"pthread_set_qos_class_self_np(BACKGROUND) returned {rc}"
)));
}
Ok(())
}
pub fn pin_any() -> crate::Result<()> {
let rc = unsafe { pthread_set_qos_class_self_np(QOS_CLASS_DEFAULT, 0) };
if rc != 0 {
return Err(CpuError::AffinityFailed(format!(
"pthread_set_qos_class_self_np(DEFAULT) returned {rc}"
)));
}
Ok(())
}