// Take a look at the license at the top of the repository in the LICENSE file. use crate::sys::cpu::{self, Cpu, Query}; use crate::CpuRefreshKind; use std::mem::zeroed; use winapi::um::sysinfoapi::{GetSystemInfo, SYSTEM_INFO}; pub(crate) struct KeyHandler { pub unique_id: String, } impl KeyHandler { pub fn new(unique_id: String) -> KeyHandler { KeyHandler { unique_id } } } pub(crate) fn init_cpus(refresh_kind: CpuRefreshKind) -> (Vec, String, String) { unsafe { let mut sys_info: SYSTEM_INFO = zeroed(); GetSystemInfo(&mut sys_info); let (vendor_id, brand) = cpu::get_vendor_id_and_brand(&sys_info); let nb_cpus = sys_info.dwNumberOfProcessors as usize; let frequencies = if refresh_kind.frequency() { cpu::get_frequencies(nb_cpus) } else { vec![0; nb_cpus] }; let mut ret = Vec::with_capacity(nb_cpus + 1); for (nb, frequency) in frequencies.iter().enumerate() { ret.push(Cpu::new_with_values( format!("CPU {}", nb + 1), vendor_id.clone(), brand.clone(), *frequency, )); } (ret, vendor_id, brand) } } pub(crate) fn add_english_counter( s: String, query: &mut Query, keys: &mut Option, counter_name: String, ) { let mut full = s.encode_utf16().collect::>(); full.push(0); if query.add_english_counter(&counter_name, full) { *keys = Some(KeyHandler::new(counter_name)); } }