mirror of
https://github.com/ClementTsang/bottom.git
synced 2024-10-26 11:20:08 +03:00
change: use sysinfo's swap value for Windows (#1436)
* some consts * change: use sysinfo's swap calculation for windows I'll add an additional field for committed in a separate PR which shows the previous value.
This commit is contained in:
parent
c651e9a904
commit
2ee0df1502
@ -412,10 +412,7 @@ impl DataCollector {
|
|||||||
self.data.cache = memory::get_cache_usage(&self.sys.system);
|
self.data.cache = memory::get_cache_usage(&self.sys.system);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.data.swap = memory::get_swap_usage(
|
self.data.swap = memory::get_swap_usage(&self.sys.system);
|
||||||
#[cfg(not(target_os = "windows"))]
|
|
||||||
&self.sys.system,
|
|
||||||
);
|
|
||||||
|
|
||||||
#[cfg(feature = "zfs")]
|
#[cfg(feature = "zfs")]
|
||||||
{
|
{
|
||||||
|
@ -2,18 +2,15 @@
|
|||||||
|
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
pub(crate) use self::sysinfo::get_cache_usage;
|
pub(crate) use self::sysinfo::get_cache_usage;
|
||||||
pub(crate) use self::sysinfo::get_ram_usage;
|
pub(crate) use self::sysinfo::{get_ram_usage, get_swap_usage};
|
||||||
|
|
||||||
pub mod sysinfo;
|
pub mod sysinfo;
|
||||||
cfg_if::cfg_if! {
|
// cfg_if::cfg_if! {
|
||||||
if #[cfg(target_os = "windows")] {
|
// if #[cfg(target_os = "windows")] {
|
||||||
pub mod windows;
|
// mod windows;
|
||||||
pub(crate) use self::windows::get_swap_usage;
|
// pub(crate) use self::windows::get_committed_usage;
|
||||||
} else {
|
// }
|
||||||
pub(crate) use self::sysinfo::get_swap_usage;
|
// }
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "zfs")]
|
#[cfg(feature = "zfs")]
|
||||||
pub mod arc;
|
pub mod arc;
|
||||||
|
@ -21,7 +21,6 @@ pub(crate) fn get_ram_usage(sys: &System) -> Option<MemHarvest> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns SWAP usage.
|
/// Returns SWAP usage.
|
||||||
#[cfg(not(target_os = "windows"))]
|
|
||||||
pub(crate) fn get_swap_usage(sys: &System) -> Option<MemHarvest> {
|
pub(crate) fn get_swap_usage(sys: &System) -> Option<MemHarvest> {
|
||||||
let mem_used = sys.used_swap();
|
let mem_used = sys.used_swap();
|
||||||
let mem_total = sys.total_swap();
|
let mem_total = sys.total_swap();
|
||||||
|
@ -4,24 +4,26 @@ use windows::Win32::System::ProcessStatus::{GetPerformanceInfo, PERFORMANCE_INFO
|
|||||||
|
|
||||||
use crate::data_collection::memory::MemHarvest;
|
use crate::data_collection::memory::MemHarvest;
|
||||||
|
|
||||||
// TODO: Note this actually calculates the total *committed* usage. Rename and change label for accuracy!
|
const PERFORMANCE_INFORMATION_SIZE: u32 = size_of::<PERFORMANCE_INFORMATION>() as _;
|
||||||
|
|
||||||
/// Get the committed memory usage.
|
/// Get the committed memory usage.
|
||||||
///
|
///
|
||||||
/// Code based on [sysinfo's](https://github.com/GuillaumeGomez/sysinfo/blob/6f8178495adcf3ca4696a9ec548586cf6a621bc8/src/windows/system.rs#L169).
|
/// Code based on [sysinfo's](https://github.com/GuillaumeGomez/sysinfo/blob/6f8178495adcf3ca4696a9ec548586cf6a621bc8/src/windows/system.rs#L169).
|
||||||
pub(crate) fn get_swap_usage() -> Option<MemHarvest> {
|
pub(crate) fn get_committed_usage() -> Option<MemHarvest> {
|
||||||
// SAFETY: The safety invariant is that we only touch what's in `perf_info` if it succeeds, and that
|
// SAFETY: The safety invariant is that we only touch what's in `perf_info` if it succeeds, and that
|
||||||
// the bindings are "safe" to use with how we call them.
|
// the bindings are "safe" to use with how we call them.
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut perf_info: PERFORMANCE_INFORMATION = zeroed();
|
let mut perf_info: PERFORMANCE_INFORMATION = zeroed();
|
||||||
if GetPerformanceInfo(&mut perf_info, size_of::<PERFORMANCE_INFORMATION>() as u32).is_ok() {
|
if GetPerformanceInfo(&mut perf_info, PERFORMANCE_INFORMATION_SIZE).is_ok() {
|
||||||
// Saturating sub by perf_info.PhysicalTotal for what sysinfo does.
|
let page_size = perf_info.PageSize;
|
||||||
let swap_total = perf_info.PageSize.saturating_mul(perf_info.CommitLimit) as u64;
|
|
||||||
let swap_used = perf_info.PageSize.saturating_mul(perf_info.CommitTotal) as u64;
|
let committed_total = page_size.saturating_mul(perf_info.CommitLimit) as u64;
|
||||||
|
let committed_used = page_size.saturating_mul(perf_info.CommitTotal) as u64;
|
||||||
|
|
||||||
Some(MemHarvest {
|
Some(MemHarvest {
|
||||||
used_bytes: swap_used,
|
used_bytes: committed_used,
|
||||||
total_bytes: swap_total,
|
total_bytes: committed_total,
|
||||||
use_percent: Some(swap_used as f64 / swap_total as f64 * 100.0),
|
use_percent: Some(committed_used as f64 / committed_total as f64 * 100.0),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
Loading…
Reference in New Issue
Block a user