Improve bench mark suite

This commit is contained in:
Anthony 2025-07-09 01:24:05 -04:00
parent 5464c467e9
commit 60bee6441f

View file

@ -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() {