bug: Divide Windows process cpu usage by number of processors (#525)

Fixes a bug displaying the CPU usage of a process in Windows due to not dividing by the number of processors.
This commit is contained in:
Clement Tsang 2021-06-26 02:34:32 -04:00 committed by GitHub
parent 4569532fb1
commit 1598654bef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 5 deletions

View File

@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [#504](https://github.com/ClementTsang/bottom/pull/504): Fixes two bugs causing the battery widget colours and mouse events to be broken.
- [#525](https://github.com/ClementTsang/bottom/pull/525): Fixes Windows process CPU usage not being divided by the number of cores.
## [0.6.1] - 2021-05-11
## Bug Fixes

View File

@ -40,7 +40,7 @@ pub fn get_process_data(
let mut process_vector: Vec<ProcessHarvest> = Vec::new();
let process_hashmap = sys.get_processes();
let cpu_usage = sys.get_global_processor_info().get_cpu_usage() as f64 / 100.0;
let num_cpus = sys.get_processors().len() as f64;
let num_processors = sys.get_processors().len() as f64;
for process_val in process_hashmap.values() {
let name = if process_val.name().is_empty() {
let process_cmd = process_val.cmd();
@ -72,7 +72,7 @@ pub fn get_process_data(
};
let pcu = {
let p = process_val.cpu_usage() as f64 / num_cpus;
let p = process_val.cpu_usage() as f64 / num_processors;
if p.is_nan() {
process_val.cpu_usage() as f64
} else {
@ -117,10 +117,10 @@ pub fn get_process_data(
let cpu_usages = get_macos_process_cpu_usage(&cpu_usage_unknown_pids)?;
for process in &mut process_vector {
if cpu_usages.contains_key(&process.pid) {
process.cpu_usage_percent = if num_cpus == 0.0 {
process.cpu_usage_percent = if num_processors == 0.0 {
*cpu_usages.get(&process.pid).unwrap()
} else {
*cpu_usages.get(&process.pid).unwrap() / num_cpus
*cpu_usages.get(&process.pid).unwrap() / num_processors
};
}
}

View File

@ -9,6 +9,7 @@ pub fn get_process_data(
let mut process_vector: Vec<ProcessHarvest> = Vec::new();
let process_hashmap = sys.get_processes();
let cpu_usage = sys.get_global_processor_info().get_cpu_usage() as f64 / 100.0;
let num_processors = sys.get_processors().len() as f64;
for process_val in process_hashmap.values() {
let name = if process_val.name().is_empty() {
let process_cmd = process_val.cmd();
@ -39,7 +40,14 @@ pub fn get_process_data(
}
};
let pcu = process_val.cpu_usage() as f64;
let pcu = {
let p = process_val.cpu_usage() as f64 / num_processors;
if p.is_nan() {
process_val.cpu_usage() as f64
} else {
p
}
};
let process_cpu_usage = if use_current_cpu_total && cpu_usage > 0.0 {
pcu / cpu_usage
} else {