#![allow(non_snake_case)]
#![allow(dead_code)]
use crate::ported::crt::{ColorElements, ColorScheme};
use crate::ported::linux::platform::Platform_setZramValues;
use crate::ported::meter::{Meter, Meter_humanUnit};
use crate::ported::richstring::{RichString, RichString_appendAscii, RichString_writeAscii};
const ZRAM_METER_COMPRESSED: usize = 0;
const ZRAM_METER_UNCOMPRESSED: usize = 1;
pub fn ZramMeter_updateValues(this: &mut Meter) {
Platform_setZramValues(this);
let uncompressed = this.values[ZRAM_METER_COMPRESSED] + this.values[ZRAM_METER_UNCOMPRESSED];
this.txtBuffer = format!(
"{}({})/{}",
Meter_humanUnit(this.values[ZRAM_METER_COMPRESSED]),
Meter_humanUnit(uncompressed),
Meter_humanUnit(this.total)
);
}
pub fn ZramMeter_display(this: &Meter, out: &mut RichString) {
let scheme = ColorScheme::active();
RichString_writeAscii(out, ColorElements::METER_TEXT.packed(scheme), b":");
let buffer = Meter_humanUnit(this.total);
RichString_appendAscii(
out,
ColorElements::METER_VALUE.packed(scheme),
buffer.as_bytes(),
);
let buffer = Meter_humanUnit(this.values[ZRAM_METER_COMPRESSED]);
RichString_appendAscii(out, ColorElements::METER_TEXT.packed(scheme), b" used:");
RichString_appendAscii(
out,
ColorElements::METER_VALUE.packed(scheme),
buffer.as_bytes(),
);
let uncompressed = this.values[ZRAM_METER_COMPRESSED] + this.values[ZRAM_METER_UNCOMPRESSED];
let buffer = Meter_humanUnit(uncompressed);
RichString_appendAscii(
out,
ColorElements::METER_TEXT.packed(scheme),
b" uncompressed:",
);
RichString_appendAscii(
out,
ColorElements::METER_VALUE.packed(scheme),
buffer.as_bytes(),
);
}
#[cfg(test)]
mod tests {
use super::*;
fn text(r: &RichString) -> String {
(0..r.chlen as usize).map(|i| r.chptr[i].chars).collect()
}
#[test]
fn update_values_from_host_zram() {
use crate::ported::linux::linuxmachine::{LinuxMachine, ZramStats};
let host = Box::leak(Box::new(LinuxMachine {
zram: ZramStats {
totalZram: 1024, usedZramComp: 1024 * 2, usedZramOrig: 1024 * 3, },
..Default::default()
}));
let mut m = Meter {
values: vec![0.0; 2],
host: &host.super_ as *const crate::ported::machine::Machine,
..Meter::empty()
};
ZramMeter_updateValues(&mut m);
assert_eq!(m.total, 1024.0);
assert_eq!(m.values[0], 2048.0);
assert_eq!(m.values[1], 1024.0);
assert_eq!(m.txtBuffer, "2.00M(3.00M)/1.00M");
}
#[test]
fn display_writes_total_used_and_uncompressed() {
let m = Meter {
host: core::ptr::null(),
total: 1024.0, values: vec![1024.0 * 2.0, 1024.0], ..Meter::empty()
};
let mut out = RichString::new();
ZramMeter_display(&m, &mut out);
assert_eq!(text(&out), ":1.00M used:2.00M uncompressed:3.00M");
}
}