From 60bee6441f20ef8bc77b5abe7de4fa00b4d1cd8c Mon Sep 17 00:00:00 2001 From: Anthony Date: Wed, 9 Jul 2025 01:24:05 -0400 Subject: [PATCH] Improve bench mark suite --- crates/editor/benches/editor_render.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/crates/editor/benches/editor_render.rs b/crates/editor/benches/editor_render.rs index 367a355d85..422297916c 100644 --- a/crates/editor/benches/editor_render.rs +++ b/crates/editor/benches/editor_render.rs @@ -1,5 +1,5 @@ use criterion::{Bencher, BenchmarkId}; -use editor::{Editor, EditorMode, MultiBuffer}; +use editor::{Editor, EditorMode, MultiBuffer, actions::MoveDown}; use gpui::{AppContext, Focusable as _, TestAppContext, TestDispatcher}; use project::Project; use rand::{Rng as _, SeedableRng as _, rngs::StdRng}; @@ -7,11 +7,24 @@ use settings::SettingsStore; use ui::IntoElement; use util::RandomCharIter; +fn editor_with_one_long_line(_bencher: &mut Bencher<'_>, args: &(String, TestAppContext)) { + let (text, cx) = args; + let mut cx = cx.clone(); + let buffer = cx.update(|cx| MultiBuffer::build_simple(&text, cx)); + + let cx = cx.add_empty_window(); + let _editor = cx.update(|window, cx| { + let editor = cx.new(|cx| Editor::new(EditorMode::full(), buffer, None, window, cx)); + window.focus(&editor.focus_handle(cx)); + editor + }); +} + fn editor_render(bencher: &mut Bencher<'_>, cx: &TestAppContext) { let mut cx = cx.clone(); let buffer = cx.update(|cx| { let mut rng = StdRng::seed_from_u64(1); - let text_len = rng.gen_range(1000..10000); + let text_len = rng.gen_range(10000..90000); if rng.r#gen() { let text = RandomCharIter::new(&mut rng) .take(text_len) @@ -31,6 +44,7 @@ fn editor_render(bencher: &mut Bencher<'_>, cx: &TestAppContext) { bencher.iter(|| { cx.update(|window, cx| { + editor.update(cx, |editor, cx| editor.move_down(&MoveDown, window, cx)); let mut view = editor.clone().into_any_element(); let _ = view.request_layout(window, cx); let _ = view.prepaint(window, cx); @@ -64,6 +78,13 @@ pub fn benches() { &cx, editor_render, ); + + let text = String::from_iter(["char"; 100000]); + criterion.bench_with_input( + BenchmarkId::new("editor_with_one_long_line", "(String, TestAppContext )"), + &(text, cx), + editor_with_one_long_line, + ); } fn main() {