aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2023-12-17 15:47:33 +0100
committerDaniel Jankowski <daniel.jankowski@rub.de>2023-12-17 15:47:33 +0100
commit6a2aed6d816c524ee6529df2ae55bbe40ced0341 (patch)
tree06aec43964593a883c18b69bdfd8bc4a7eafa201
parentchore: move from to_string to to_owned (diff)
downloadsl0pstatus-6a2aed6d816c524ee6529df2ae55bbe40ced0341.tar.gz
sl0pstatus-6a2aed6d816c524ee6529df2ae55bbe40ced0341.tar.xz
sl0pstatus-6a2aed6d816c524ee6529df2ae55bbe40ced0341.zip
feat: add bench for render_bar
-rw-r--r--benches/benches.rs50
-rw-r--r--src/config.rs54
-rw-r--r--src/render.rs17
3 files changed, 85 insertions, 36 deletions
diff --git a/benches/benches.rs b/benches/benches.rs
index fa1461b..59c9027 100644
--- a/benches/benches.rs
+++ b/benches/benches.rs
@@ -8,6 +8,53 @@ use zjstatus::{
widgets::{datetime::DateTimeWidget, mode::ModeWidget, session::SessionWidget, widget::Widget},
};
+fn bench_moduleconfig_render_bar(c: &mut Criterion) {
+ let config = BTreeMap::from([
+ ("format_left".to_owned(), "{mode} #[fg=#89B4FA,bg=#181825,bold]{session} {tabs} {command_1} {command_git_branch} {command_3}".to_owned()),
+ ("format_right".to_owned(), "{datetime}".to_owned()),
+ ("format_space".to_owned(), "#[bg=#181825]".to_owned()),
+ ]);
+
+ let module_config = ModuleConfig::new(config.clone());
+
+ let mut widgets: BTreeMap<String, Arc<dyn Widget>> = BTreeMap::new();
+
+ widgets.insert(
+ "mode".to_owned(),
+ Arc::new(ModeWidget::new(BTreeMap::from([(
+ "mode_normal".to_owned(),
+ "#[bg=blue] #[bg=yellow] ".to_owned(),
+ )]))),
+ );
+
+ widgets.insert(
+ "datetime".to_owned(),
+ Arc::new(DateTimeWidget::new(BTreeMap::from([(
+ "datetime".to_owned(),
+ "#[fg=#6C7086,bg=#181825] {index} {name} ".to_owned(),
+ )]))),
+ );
+
+ widgets.insert(
+ "session".to_owned(),
+ Arc::new(SessionWidget::new(BTreeMap::from([]))),
+ );
+
+ let state = ZellijState {
+ mode: ModeInfo::default(),
+ tabs: vec![TabInfo {
+ name: "test".to_owned(),
+ active: true,
+ ..Default::default()
+ }],
+ ..Default::default()
+ };
+
+ c.bench_function("ModuleConfig::render_bar", |b| {
+ b.iter(|| module_config.render_bar(state.clone(), widgets.clone()))
+ });
+}
+
fn bench_formattedpart_format_string_with_widgets(c: &mut Criterion) {
let format = FormattedPart::from_format_string(
"#[fg=#9399B2,bg=#181825,bold,italic] {mode} {datetime} {session} [] ".to_owned(),
@@ -75,8 +122,9 @@ fn bench_moduleconfig_new(c: &mut Criterion) {
fn criterion_benchmark(c: &mut Criterion) {
bench_formattedpart_from_format_string(c);
- bench_moduleconfig_new(c);
bench_formattedpart_format_string_with_widgets(c);
+ bench_moduleconfig_new(c);
+ bench_moduleconfig_render_bar(c);
}
criterion_group!(benches, criterion_benchmark);
diff --git a/src/config.rs b/src/config.rs
index 584898b..8591788 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -88,16 +88,10 @@ impl ModuleConfig {
let widget_string_left = self
.left_parts
.iter()
- .map(|p| p.content.clone())
- .fold(String::new(), |a, b| a + b.as_str());
+ .fold(String::new(), |a, b| a + &b.content);
- let left_len = self.process_widget_click(
- click_pos,
- widget_string_left,
- widget_map.clone(),
- &state,
- 0,
- );
+ let left_len =
+ self.process_widget_click(click_pos, widget_string_left, widget_map.clone(), &state, 0);
if click_pos <= left_len {
return;
@@ -112,16 +106,15 @@ impl ModuleConfig {
});
let widget_spacer = strip_ansi_escapes::strip_str(self.get_spacer(
- " ".repeat(left_len),
- output_right,
+ &" ".repeat(left_len),
+ &output_right,
state.cols,
));
let widget_string_right = self
.right_parts
.iter()
- .map(|p| p.content.clone())
- .fold(String::new(), |a, b| a + b.as_str());
+ .fold(String::new(), |a, b| a + &b.content);
self.process_widget_click(
click_pos,
@@ -191,27 +184,38 @@ impl ModuleConfig {
)
});
- let mut border_top = "".to_owned();
- if self.border.enabled && self.border.position == BorderPosition::Top {
- border_top = format!("{}\n", self.border.draw(state.cols));
- }
+ if self.border.enabled {
+ let mut border_top = "".to_owned();
+ if self.border.enabled && self.border.position == BorderPosition::Top {
+ border_top = format!("{}\n", self.border.draw(state.cols));
+ }
+
+ let mut border_bottom = "".to_owned();
+ if self.border.enabled && self.border.position == BorderPosition::Bottom {
+ border_bottom = format!("\n{}", self.border.draw(state.cols));
+ }
- let mut border_bottom = "".to_owned();
- if self.border.enabled && self.border.position == BorderPosition::Bottom {
- border_bottom = format!("\n{}", self.border.draw(state.cols));
+ print!(
+ "{}{}{}{}{}",
+ border_top,
+ output_left,
+ self.get_spacer(&output_left, &output_right, state.cols),
+ output_right,
+ border_bottom,
+ );
+
+ return;
}
print!(
- "{}{}{}{}{}",
- border_top,
+ "{}{}{}",
output_left,
- self.get_spacer(output_left.clone(), output_right.clone(), state.cols),
+ self.get_spacer(&output_left, &output_right, state.cols),
output_right,
- border_bottom,
);
}
- fn get_spacer(&self, output_left: String, output_right: String, cols: usize) -> String {
+ fn get_spacer(&self, output_left: &str, output_right: &str, cols: usize) -> String {
let text_count = strip_ansi_escapes::strip_str(output_left).chars().count()
+ strip_ansi_escapes::strip_str(output_right).chars().count();
diff --git a/src/render.rs b/src/render.rs
index 4c2c74f..f4cc14f 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -36,15 +36,14 @@ impl FormattedPart {
let mut result = FormattedPart::default();
- let format_content_split = format.split(']');
+ let mut format_content_split = format.split(']').collect::<Vec<&str>>();
- if format_content_split.clone().count() == 1 {
+ if format_content_split.len() == 1 {
result.content = format;
return result;
}
- let mut format_content_split = format_content_split.collect::<Vec<&str>>();
let parts = format_content_split[0].split(',');
format_content_split.remove(0);
@@ -103,17 +102,15 @@ impl FormattedPart {
for widget in WIDGET_REGEX.captures_iter(&self.content) {
let match_name = widget.get(0).unwrap().as_str();
- let mut widget_key = match_name.trim_matches(|c| c == '{' || c == '}');
+ let widget_key = match_name.trim_matches(|c| c == '{' || c == '}');
+ let mut widget_key_name = widget_key;
if widget_key.starts_with("command_") {
- widget_key = "command";
+ widget_key_name = "command";
}
- let result = match widgets.get(widget_key) {
- Some(widget) => widget.process(
- match_name.trim_matches(|c| c == '{' || c == '}'),
- state,
- ),
+ let result = match widgets.get(widget_key_name) {
+ Some(widget) => widget.process(widget_key, state),
None => "Use of uninitialized widget".to_owned(),
};