summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--energy-monitor/src/energy.rs6
-rw-r--r--energy-monitor/src/process.rs27
-rw-r--r--energy-monitor/src/ui.rs6
3 files changed, 30 insertions, 9 deletions
diff --git a/energy-monitor/src/energy.rs b/energy-monitor/src/energy.rs
index 55b6e53..808b990 100644
--- a/energy-monitor/src/energy.rs
+++ b/energy-monitor/src/energy.rs
@@ -16,12 +16,12 @@ pub struct ProcessInfo {
}
impl ProcessInfo {
- pub fn new(pid: Pid, name: String) -> Self {
+ pub fn new(pid: Pid, name: String, energy: f64, tree_energy: f64) -> Self {
Self {
pid,
name,
- energy: 0.,
- tree_energy: 0.,
+ energy,
+ tree_energy,
history: Vec::new(),
}
}
diff --git a/energy-monitor/src/process.rs b/energy-monitor/src/process.rs
index d35641e..363f478 100644
--- a/energy-monitor/src/process.rs
+++ b/energy-monitor/src/process.rs
@@ -41,14 +41,15 @@ impl ProcessData {
let elapsed = self.started_at.elapsed().as_secs_f64();
for (pid, (energy, tree_energy)) in energy_data {
- let process_info = self.process_info.entry(pid).or_insert({
+ let process_info = self.process_info.entry(pid).or_insert_with(|| {
let name = get_process_name(pid).unwrap_or_else(|| format!("Process {}", pid));
- ProcessInfo::new(pid, name)
+ ProcessInfo::new(pid, name, energy, tree_energy)
});
let process_delta = energy - process_info.energy;
let delta = tree_energy - process_info.tree_energy;
+ let delta = (process_info.history.last().map(|x| x.1).unwrap_or(delta) + delta) * 0.5;
process_info.energy = energy;
process_info.tree_energy = tree_energy;
process_info.add_history_point(elapsed, delta);
@@ -64,15 +65,35 @@ impl ProcessData {
.partial_cmp(&self.process_info[a].energy)
.unwrap()
});
+ let mut sorted_processes = updated_processes.clone();
// Update our local process list
self.processes = updated_processes;
+ sorted_processes.sort_unstable();
// TODO: garbage collect process_info
+ self.process_info
+ .retain(|pid, _| sorted_processes.binary_search(pid).is_ok());
// Add total energy to history
let elapsed = self.started_at.elapsed().as_secs_f64();
- self.add_total_energy_point(elapsed, total_energy);
+ let total_energy = (total_energy
+ + self
+ .total_energy_history
+ .last()
+ .map(|(_, x)| x)
+ .unwrap_or(&total_energy))
+ * 0.5;
+ self.add_total_energy_point(
+ elapsed,
+ (total_energy
+ + self
+ .total_energy_history
+ .last()
+ .map(|(_, x)| x)
+ .unwrap_or(&total_energy))
+ * 0.5,
+ );
}
fn add_total_energy_point(&mut self, timestamp: f64, energy: f64) {
diff --git a/energy-monitor/src/ui.rs b/energy-monitor/src/ui.rs
index 276a3df..3a94e53 100644
--- a/energy-monitor/src/ui.rs
+++ b/energy-monitor/src/ui.rs
@@ -192,7 +192,7 @@ fn draw_detailed_view(f: &mut Frame, app: &mut App, area: Rect) {
let dataset = Dataset::default()
.name(process.name.clone())
- .marker(symbols::Marker::Braille)
+ .marker(symbols::Marker::Dot)
.style(
Style::default().fg(app
.process_colors
@@ -288,7 +288,7 @@ fn draw_energy_graph(f: &mut Frame, app: &mut App, area: Rect) {
datasets.push(
Dataset::default()
.name("Total System Energy")
- .marker(symbols::Marker::Braille)
+ .marker(symbols::Marker::HalfBlock)
.style(Style::default().fg(Color::White))
.data(&app.process_data.total_energy_history),
);
@@ -301,7 +301,7 @@ fn draw_energy_graph(f: &mut Frame, app: &mut App, area: Rect) {
datasets.push(
Dataset::default()
.name(process.name.clone())
- .marker(symbols::Marker::Braille)
+ .marker(symbols::Marker::Dot)
.style(
Style::default().fg(app
.process_colors