summaryrefslogtreecommitdiffstats
path: root/src/widgets/process_table.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/process_table.rs')
-rw-r--r--src/widgets/process_table.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/widgets/process_table.rs b/src/widgets/process_table.rs
index 14d4bcda..5aa03c9a 100644
--- a/src/widgets/process_table.rs
+++ b/src/widgets/process_table.rs
@@ -91,6 +91,12 @@ fn make_column(column: ProcColumn) -> SortColumn<ProcColumn> {
User => SortColumn::soft(User, Some(0.05)),
State => SortColumn::hard(State, 7),
Time => SortColumn::new(Time),
+ #[cfg(feature = "gpu")]
+ GpuMem => SortColumn::new(GpuMem).default_descending(),
+ #[cfg(feature = "gpu")]
+ GpuMemPercent => SortColumn::new(GpuMemPercent).default_descending(),
+ #[cfg(feature = "gpu")]
+ GpuUtilPercent => SortColumn::new(GpuUtilPercent).default_descending(),
}
}
@@ -117,6 +123,10 @@ pub enum ProcWidgetColumn {
User,
State,
Time,
+ #[cfg(feature = "gpu")]
+ GpuMem,
+ #[cfg(feature = "gpu")]
+ GpuUtil,
}
impl<'de> Deserialize<'de> for ProcWidgetColumn {
@@ -140,6 +150,10 @@ impl<'de> Deserialize<'de> for ProcWidgetColumn {
"state" => Ok(ProcWidgetColumn::State),
"user" => Ok(ProcWidgetColumn::User),
"time" => Ok(ProcWidgetColumn::Time),
+ #[cfg(feature = "gpu")]
+ "gmem" | "gmem%" => Ok(ProcWidgetColumn::GpuMem),
+ #[cfg(feature = "gpu")]
+ "gpu%" => Ok(ProcWidgetColumn::GpuUtil),
_ => Err(Error::custom("doesn't match any column type")),
}
}
@@ -277,6 +291,16 @@ impl ProcWidgetState {
ProcWidgetColumn::User => User,
ProcWidgetColumn::State => State,
ProcWidgetColumn::Time => Time,
+ #[cfg(feature = "gpu")]
+ ProcWidgetColumn::GpuMem => {
+ if mem_vals {
+ GpuMem
+ } else {
+ GpuMemPercent
+ }
+ }
+ #[cfg(feature = "gpu")]
+ ProcWidgetColumn::GpuUtil => GpuUtilPercent,
};
make_column(col)
@@ -318,6 +342,10 @@ impl ProcWidgetState {
State => ProcWidgetColumn::State,
User => ProcWidgetColumn::User,
Time => ProcWidgetColumn::Time,
+ #[cfg(feature = "gpu")]
+ GpuMem | GpuMemPercent => ProcWidgetColumn::GpuMem,
+ #[cfg(feature = "gpu")]
+ GpuUtilPercent => ProcWidgetColumn::GpuUtil,
}
})
.collect::<IndexSet<_>>();
@@ -747,6 +775,23 @@ impl ProcWidgetState {
self.force_data_update();
}
}
+ #[cfg(feature = "gpu")]
+ if let Some(index) = self.column_mapping.get_index_of(&ProcWidgetColumn::GpuMem) {
+ if let Some(mem) = self.get_mut_proc_col(index) {
+ match mem {
+ ProcColumn::GpuMem => {
+ *mem = ProcColumn::GpuMemPercent;
+ }
+ ProcColumn::GpuMemPercent => {
+ *mem = ProcColumn::GpuMem;
+ }
+ _ => unreachable!(),
+ }
+
+ self.sort_table.set_data(self.column_text());
+ self.force_data_update();
+ }
+ }
}
/// Forces an update of the data stored.
@@ -1029,6 +1074,10 @@ mod test {
num_similar: 0,
disabled: false,
time: Duration::from_secs(0),
+ #[cfg(feature = "gpu")]
+ gpu_mem_usage: MemUsage::Percent(1.1),
+ #[cfg(feature = "gpu")]
+ gpu_usage: 0,
};
let b = ProcWidgetData {