heim_cpu/freq.rs
1use std::fmt;
2
3use heim_common::prelude::*;
4use heim_common::units::Frequency;
5
6use crate::sys;
7
8/// System CPU frequency.
9pub struct CpuFrequency(sys::CpuFrequency);
10
11wrap!(CpuFrequency, sys::CpuFrequency);
12
13impl CpuFrequency {
14 /// Current CPU frequency.
15 ///
16 /// ## Compatibility
17 ///
18 /// On Linux it returns the real-time value, on all other platforms
19 /// it represents the nominal "fixed" value.
20 pub fn current(&self) -> Frequency {
21 self.as_ref().current()
22 }
23
24 /// Minimal CPU frequency.
25 ///
26 /// ## Returns
27 ///
28 /// Returns `None` if value can't be determined.
29 pub fn min(&self) -> Option<Frequency> {
30 self.as_ref().min()
31 }
32
33 /// Maximal CPU frequency.
34 ///
35 /// ## Returns
36 ///
37 /// Returns `None` if value can't be determined.
38 pub fn max(&self) -> Option<Frequency> {
39 self.as_ref().max()
40 }
41}
42
43impl fmt::Debug for CpuFrequency {
44 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
45 f.debug_struct("CpuFrequency")
46 .field("current", &self.current())
47 .field("min", &self.min())
48 .field("max", &self.max())
49 .finish()
50 }
51}
52
53/// Returns future which will resolve into [CpuFrequency].
54///
55/// ## Compatibility
56///
57/// Per-CPU frequencies retrieval is available for Linux,
58/// see Linux-specific [frequencies] function.
59///
60/// [CpuFrequency]: ./struct.CpuFrequency.html
61/// [frequencies]: ./os/linux/fn.frequencies.html
62pub fn frequency() -> impl Future<Output = Result<CpuFrequency>> {
63 sys::frequency().map_ok(Into::into)
64}