summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2020-12-12 21:06:46 -0500
committerGitHub <noreply@github.com>2020-12-12 21:06:46 -0500
commit5d7697d3da6e9e481bca38fc6e1d28e8e48ff2ee (patch)
treef743bceb03c08cccb432cfa45e954f8e3b599781
parent766fe25c55b1a3776dc94daccbe0505c5cdfb0a1 (diff)
refactor: More minor optimization changes (#353)
- Move data rather than cloning during data transferring step - Try using beef?
-rw-r--r--Cargo.lock7
-rw-r--r--Cargo.toml9
-rw-r--r--src/app/data_farmer.rs50
-rw-r--r--src/app/query.rs8
-rw-r--r--src/bin/main.rs2
-rw-r--r--src/data_conversion.rs4
-rw-r--r--src/options.rs2
-rw-r--r--src/utils/error.rs3
8 files changed, 47 insertions, 38 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 1c9ff7ac..b36605e0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -101,6 +101,12 @@ dependencies = [
]
[[package]]
+name = "beef"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "474a626a67200bd107d44179bb3d4fc61891172d11696609264589be6a0e6a43"
+
+[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -114,6 +120,7 @@ dependencies = [
"assert_cmd",
"backtrace",
"battery",
+ "beef",
"cargo-husky",
"chrono",
"clap",
diff --git a/Cargo.toml b/Cargo.toml
index 96a692f3..ed2166c1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,10 +18,10 @@ path = "src/bin/main.rs"
doc = false
[profile.release]
-debug = 1
-lto = true
-# debug = true
-# lto = false
+# debug = 1
+# lto = true
+debug = true
+lto = false
opt-level = 3
codegen-units = 1
@@ -32,6 +32,7 @@ default = ["fern", "log"]
anyhow = "1.0.34"
backtrace = "0.3"
battery = "0.7.8"
+beef = "0.4.4"
chrono = "0.4.19"
crossterm = "0.18.2"
ctrlc = { version = "3.1", features = ["termination"] }
diff --git a/src/app/data_farmer.rs b/src/app/data_farmer.rs
index 9b1ef2ee..b2dc0cc5 100644
--- a/src/app/data_farmer.rs
+++ b/src/app/data_farmer.rs
@@ -121,7 +121,7 @@ impl DataCollection {
self.timed_data_vec.drain(0..remove_index);
}
- pub fn eat_data(&mut self, harvested_data: &Data) {
+ pub fn eat_data(&mut self, harvested_data: Box<Data>) {
// trace!("Eating data now...");
let harvested_time = harvested_data.last_collection_time;
// trace!("Harvested time: {:?}", harvested_time);
@@ -129,41 +129,39 @@ impl DataCollection {
let mut new_entry = TimedData::default();
// Network
- if let Some(network) = &harvested_data.network {
+ if let Some(network) = harvested_data.network {
self.eat_network(network, &mut new_entry);
}
// Memory and Swap
- if let Some(memory) = &harvested_data.memory {
- if let Some(swap) = &harvested_data.swap {
- self.eat_memory_and_swap(memory, swap, &mut new_entry);
- }
+ if let (Some(memory), Some(swap)) = (harvested_data.memory, harvested_data.swap) {
+ self.eat_memory_and_swap(memory, swap, &mut new_entry);
}
// CPU
- if let Some(cpu) = &harvested_data.cpu {
+ if let Some(cpu) = harvested_data.cpu {
self.eat_cpu(cpu, &mut new_entry);
}
// Temp
- if let Some(temperature_sensors) = &harvested_data.temperature_sensors {
+ if let Some(temperature_sensors) = harvested_data.temperature_sensors {
self.eat_temp(temperature_sensors);
}
// Disks
- if let Some(disks) = &harvested_data.disks {
- if let Some(io) = &harvested_data.io {
+ if let Some(disks) = harvested_data.disks {
+ if let Some(io) = harvested_data.io {
self.eat_disks(disks, io, harvested_time);
}
}
// Processes
- if let Some(list_of_processes) = &harvested_data.list_of_processes {
+ if let Some(list_of_processes) = harvested_data.list_of_processes {
self.eat_proc(list_of_processes);
}
// Battery
- if let Some(list_of_batteries) = &harvested_data.list_of_batteries {
+ if let Some(list_of_batteries) = harvested_data.list_of_batteries {
self.eat_battery(list_of_batteries);
}
@@ -173,7 +171,7 @@ impl DataCollection {
}
fn eat_memory_and_swap(
- &mut self, memory: &mem::MemHarvest, swap: &mem::MemHarvest, new_entry: &mut TimedData,
+ &mut self, memory: mem::MemHarvest, swap: mem::MemHarvest, new_entry: &mut TimedData,
) {
// trace!("Eating mem and swap.");
// Memory
@@ -193,11 +191,11 @@ impl DataCollection {
}
// In addition copy over latest data for easy reference
- self.memory_harvest = memory.clone();
- self.swap_harvest = swap.clone();
+ self.memory_harvest = memory;
+ self.swap_harvest = swap;
}
- fn eat_network(&mut self, network: &network::NetworkHarvest, new_entry: &mut TimedData) {
+ fn eat_network(&mut self, network: network::NetworkHarvest, new_entry: &mut TimedData) {
// trace!("Eating network.");
// FIXME [NETWORKING; CONFIG]: The ability to config this?
// FIXME [NETWORKING]: Support bits, support switching between decimal and binary units (move the log part to conversion and switch on the fly)
@@ -216,10 +214,10 @@ impl DataCollection {
};
// In addition copy over latest data for easy reference
- self.network_harvest = network.clone();
+ self.network_harvest = network;
}
- fn eat_cpu(&mut self, cpu: &[cpu::CpuData], new_entry: &mut TimedData) {
+ fn eat_cpu(&mut self, cpu: Vec<cpu::CpuData>, new_entry: &mut TimedData) {
// trace!("Eating CPU.");
// Note this only pre-calculates the data points - the names will be
// within the local copy of cpu_harvest. Since it's all sequential
@@ -230,14 +228,14 @@ impl DataCollection {
self.cpu_harvest = cpu.to_vec();
}
- fn eat_temp(&mut self, temperature_sensors: &[temperature::TempHarvest]) {
+ fn eat_temp(&mut self, temperature_sensors: Vec<temperature::TempHarvest>) {
// trace!("Eating temps.");
// TODO: [PO] To implement
self.temp_harvest = temperature_sensors.to_vec();
}
fn eat_disks(
- &mut self, disks: &[disks::DiskHarvest], io: &disks::IOHarvest, harvested_time: Instant,
+ &mut self, disks: Vec<disks::DiskHarvest>, io: disks::IOHarvest, harvested_time: Instant,
) {
// trace!("Eating disks.");
// TODO: [PO] To implement
@@ -307,17 +305,17 @@ impl DataCollection {
}
}
- self.disk_harvest = disks.to_vec();
- self.io_harvest = io.clone();
+ self.disk_harvest = disks;
+ self.io_harvest = io;
}
- fn eat_proc(&mut self, list_of_processes: &[processes::ProcessHarvest]) {
+ fn eat_proc(&mut self, list_of_processes: Vec<processes::ProcessHarvest>) {
// trace!("Eating proc.");
- self.process_harvest = list_of_processes.to_vec();
+ self.process_harvest = list_of_processes;
}
- fn eat_battery(&mut self, list_of_batteries: &[batteries::BatteryHarvest]) {
+ fn eat_battery(&mut self, list_of_batteries: Vec<batteries::BatteryHarvest>) {
// trace!("Eating batteries.");
- self.battery_harvest = list_of_batteries.to_vec();
+ self.battery_harvest = list_of_batteries;
}
}
diff --git a/src/app/query.rs b/src/app/query.rs
index 4d693bb4..c61c5dad 100644
--- a/src/app/query.rs
+++ b/src/app/query.rs
@@ -78,7 +78,7 @@ impl ProcessQuery for ProcWidgetState {
break;
}
} else if COMPARISON_LIST.contains(&queue_top.to_lowercase().as_str()) {
- return Err(QueryError("Comparison not valid here".into()));
+ return Err(QueryError(beef::Cow::borrowed("Comparison not valid here")));
} else {
break;
}
@@ -117,7 +117,7 @@ impl ProcessQuery for ProcWidgetState {
break;
}
} else if COMPARISON_LIST.contains(&queue_top.to_lowercase().as_str()) {
- return Err(QueryError("Comparison not valid here".into()));
+ return Err(QueryError(beef::Cow::borrowed("Comparison not valid here")));
} else {
break;
}
@@ -165,7 +165,9 @@ impl ProcessQuery for ProcWidgetState {
}
} else if queue_top == "(" {
if query.is_empty() {
- return Err(QueryError("Missing closing parentheses".into()));
+ return Err(QueryError(beef::Cow::borrowed(
+ "Missing closing parentheses",
+ )));
}
let mut list_of_ors = VecDeque::new();
diff --git a/src/bin/main.rs b/src/bin/main.rs
index 8df793a7..869c39db 100644
--- a/src/bin/main.rs
+++ b/src/bin/main.rs
@@ -158,7 +158,7 @@ fn main() -> Result<()> {
handle_force_redraws(&mut app);
}
BottomEvent::Update(data) => {
- app.data_collection.eat_data(&data);
+ app.data_collection.eat_data(data);
// This thing is required as otherwise, some widgets can't draw correctly w/o
// some data (or they need to be re-drawn).
diff --git a/src/data_conversion.rs b/src/data_conversion.rs
index 2508d029..271fa598 100644
--- a/src/data_conversion.rs
+++ b/src/data_conversion.rs
@@ -7,7 +7,7 @@ use crate::{
};
use data_harvester::processes::ProcessSorting;
use indexmap::IndexSet;
-use std::collections::{HashMap, HashSet, VecDeque};
+use std::collections::{HashMap, VecDeque};
/// Point is of time, data
type Point = (f64, f64);
@@ -453,7 +453,7 @@ pub fn convert_process_data(
// TODO [THREAD]: Thread highlighting and hiding support
// For macOS see https://github.com/hishamhm/htop/pull/848/files
- let mut complete_pid_set: HashSet<Pid> =
+ let mut complete_pid_set: fnv::FnvHashSet<Pid> =
existing_converted_process_data.keys().copied().collect();
for process in &current_data.process_harvest {
diff --git a/src/options.rs b/src/options.rs
index f3f6305c..f5edc46e 100644
--- a/src/options.rs
+++ b/src/options.rs
@@ -1,7 +1,7 @@
+use beef::Cow;
use regex::Regex;
use serde::{Deserialize, Serialize};
use std::{
- borrow::Cow,
collections::{HashMap, HashSet},
path::PathBuf,
str::FromStr,
diff --git a/src/utils/error.rs b/src/utils/error.rs
index 861fc101..848b9919 100644
--- a/src/utils/error.rs
+++ b/src/utils/error.rs
@@ -1,4 +1,5 @@
-use std::{borrow::Cow, result};
+use beef::Cow;
+use std::result;
use thiserror::Error;
/// A type alias for handling errors related to Bottom.