#![allow(non_snake_case)]
#![allow(dead_code)]
use crate::ported::crt::{ColorElements, ColorScheme};
use crate::ported::linux::platform::Platform_getPressureStall;
use crate::ported::meter::Meter;
use crate::ported::richstring::{RichString, RichString_appendnAscii};
pub fn PressureStallMeter_updateValues(this: &mut Meter) {
let file = if this.name.contains("CPU") {
"cpu"
} else if this.name.contains("IO") {
"io"
} else if this.name.contains("IRQ") {
"irq"
} else {
"memory"
};
let some = this.name.contains("Some");
let mut v0 = this.values[0];
let mut v1 = this.values[1];
let mut v2 = this.values[2];
Platform_getPressureStall(file, some, &mut v0, &mut v1, &mut v2);
this.values[0] = v0;
this.values[1] = v1;
this.values[2] = v2;
this.curItems = 1;
this.txtBuffer = format!(
"{} {} {:5.2}% {:5.2}% {:5.2}%",
if some { "some" } else { "full" },
file,
v0,
v1,
v2
);
}
pub fn PressureStallMeter_display(this: &Meter, out: &mut RichString) {
let scheme = ColorScheme::active();
let buffer = format!("{:5.2}% ", this.values[0]);
RichString_appendnAscii(
out,
ColorElements::PRESSURE_STALL_TEN.packed(scheme),
buffer.as_bytes(),
buffer.len(),
);
let buffer = format!("{:5.2}% ", this.values[1]);
RichString_appendnAscii(
out,
ColorElements::PRESSURE_STALL_SIXTY.packed(scheme),
buffer.as_bytes(),
buffer.len(),
);
let buffer = format!("{:5.2}% ", this.values[2]);
RichString_appendnAscii(
out,
ColorElements::PRESSURE_STALL_THREEHUNDRED.packed(scheme),
buffer.as_bytes(),
buffer.len(),
);
}
#[cfg(test)]
mod tests {
use super::*;
use crate::ported::meter::BAR_METERMODE;
fn text(r: &RichString) -> String {
(0..r.chlen as usize).map(|i| r.chptr[i].chars).collect()
}
fn meter(values: Vec<f64>) -> Meter {
Meter {
host: core::ptr::null(),
values,
mode: BAR_METERMODE,
..Meter::empty()
}
}
#[test]
fn pressure_stall_display_three_figures() {
let m = meter(vec![12.34, 5.60, 0.00]);
let mut out = RichString::new();
PressureStallMeter_display(&m, &mut out);
assert_eq!(text(&out), "12.34% 5.60% 0.00% ");
}
#[test]
fn pressure_stall_display_pads_to_width_five() {
let m = meter(vec![1.2, 100.0, 0.05]);
let mut out = RichString::new();
PressureStallMeter_display(&m, &mut out);
assert_eq!(text(&out), " 1.20% 100.00% 0.05% ");
}
}