cbtop/frequency_control/
governor.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub enum CpuGovernor {
4 Performance,
6 Powersave,
8 Ondemand,
10 Conservative,
12 Schedutil,
14 Userspace,
16 Unknown,
18}
19
20const GOVERNOR_SPECS: &[(CpuGovernor, &str)] = &[
22 (CpuGovernor::Performance, "performance"),
23 (CpuGovernor::Powersave, "powersave"),
24 (CpuGovernor::Ondemand, "ondemand"),
25 (CpuGovernor::Conservative, "conservative"),
26 (CpuGovernor::Schedutil, "schedutil"),
27 (CpuGovernor::Userspace, "userspace"),
28];
29
30impl CpuGovernor {
31 pub fn name(&self) -> &'static str {
33 GOVERNOR_SPECS
34 .iter()
35 .find(|(v, _)| v == self)
36 .map(|(_, n)| *n)
37 .unwrap_or("unknown")
38 }
39
40 pub fn parse(s: &str) -> Self {
42 let lower = s.trim().to_lowercase();
43 GOVERNOR_SPECS
44 .iter()
45 .find(|(_, n)| *n == lower)
46 .map(|(v, _)| *v)
47 .unwrap_or(Self::Unknown)
48 }
49
50 pub fn is_deterministic(&self) -> bool {
52 matches!(self, Self::Performance | Self::Powersave | Self::Userspace)
53 }
54}