diff options
Diffstat (limited to 'src/widgets/process_table.rs')
-rw-r--r-- | src/widgets/process_table.rs | 49 |
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 { |