use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
pub struct ProcPidSmapsRollup {
pub rss: u64,
pub shared_clean: u64,
pub shared_dirty: u64,
pub private_clean: u64,
pub private_dirty: u64,
pub pss: u64,
pub pss_dirty: u64,
pub pss_anon: u64,
pub pss_file: u64,
pub pss_shmem: u64,
}
impl ProcPidSmapsRollup {
pub(crate) fn from_procfs_smaps_rollup(
smaps_rollup: procfs::process::SmapsRollup,
) -> Option<Self> {
let memory_maps = smaps_rollup.memory_map_rollup.0;
if memory_maps.is_empty() {
return None;
}
let mut r = Self::default();
for (k, v) in &memory_maps[0].extension.map {
let v = v / 1024;
match k.as_str() {
"Rss" => r.rss = v,
"Shared_Dirty" => r.shared_dirty = v,
"Shared_Clean" => r.shared_clean = v,
"Private_Dirty" => r.private_dirty = v,
"Private_Clean" => r.private_clean = v,
"Pss" => r.pss = v,
"Pss_Dirty" => r.pss_dirty = v,
"Pss_Anon" => r.pss_anon = v,
"Pss_File" => r.pss_file = v,
"Pss_Shmem" => r.pss_shmem = v,
_ => {}
}
}
Some(r)
}
}