sum_tree: Replace rayon with futures (#41586)

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Co-authored by: Kate <kate@zed.dev>
This commit is contained in:
Lukas Wirth
2025-10-31 10:39:01 +00:00
committed by GitHub
parent 7c29c6d7a6
commit f2ce06c7b0
67 changed files with 1271 additions and 640 deletions
+27 -10
View File
@@ -3,6 +3,7 @@ use std::ops::Range;
use criterion::{
BatchSize, BenchmarkId, Criterion, Throughput, black_box, criterion_group, criterion_main,
};
use gpui::{AsyncApp, TestAppContext};
use rand::prelude::*;
use rand::rngs::StdRng;
use rope::{Point, Rope};
@@ -26,10 +27,10 @@ fn generate_random_text(rng: &mut StdRng, len: usize) -> String {
str
}
fn generate_random_rope(rng: &mut StdRng, text_len: usize) -> Rope {
fn generate_random_rope(rng: &mut StdRng, text_len: usize, cx: &AsyncApp) -> Rope {
let text = generate_random_text(rng, text_len);
let mut rope = Rope::new();
rope.push(&text);
rope.push(&text, cx.background_executor());
rope
}
@@ -82,11 +83,13 @@ fn rope_benchmarks(c: &mut Criterion) {
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let text = generate_random_text(&mut rng, *size);
let cx = TestAppContext::single();
let cx = cx.to_async();
b.iter(|| {
let mut rope = Rope::new();
for _ in 0..10 {
rope.push(&text);
rope.push(&text, cx.background_executor());
}
});
});
@@ -99,8 +102,10 @@ fn rope_benchmarks(c: &mut Criterion) {
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let mut random_ropes = Vec::new();
let cx = TestAppContext::single();
let cx = cx.to_async();
for _ in 0..5 {
let rope = generate_random_rope(&mut rng, *size);
let rope = generate_random_rope(&mut rng, *size, &cx);
random_ropes.push(rope);
}
@@ -119,7 +124,9 @@ fn rope_benchmarks(c: &mut Criterion) {
group.throughput(Throughput::Bytes(*size as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let rope = generate_random_rope(&mut rng, *size);
let cx = TestAppContext::single();
let cx = cx.to_async();
let rope = generate_random_rope(&mut rng, *size, &cx);
b.iter_batched(
|| generate_random_rope_ranges(&mut rng, &rope),
@@ -139,7 +146,9 @@ fn rope_benchmarks(c: &mut Criterion) {
group.throughput(Throughput::Bytes(*size as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let rope = generate_random_rope(&mut rng, *size);
let cx = TestAppContext::single();
let cx = cx.to_async();
let rope = generate_random_rope(&mut rng, *size, &cx);
b.iter_batched(
|| generate_random_rope_ranges(&mut rng, &rope),
@@ -160,7 +169,9 @@ fn rope_benchmarks(c: &mut Criterion) {
group.throughput(Throughput::Bytes(*size as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let rope = generate_random_rope(&mut rng, *size);
let cx = TestAppContext::single();
let cx = cx.to_async();
let rope = generate_random_rope(&mut rng, *size, &cx);
b.iter(|| {
let chars = rope.chars().count();
@@ -175,7 +186,9 @@ fn rope_benchmarks(c: &mut Criterion) {
group.throughput(Throughput::Bytes(*size as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let rope = generate_random_rope(&mut rng, *size);
let cx = TestAppContext::single();
let cx = cx.to_async();
let rope = generate_random_rope(&mut rng, *size, &cx);
b.iter_batched(
|| generate_random_rope_points(&mut rng, &rope),
@@ -196,7 +209,9 @@ fn rope_benchmarks(c: &mut Criterion) {
group.throughput(Throughput::Bytes(*size as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let rope = generate_random_rope(&mut rng, *size);
let cx = TestAppContext::single();
let cx = cx.to_async();
let rope = generate_random_rope(&mut rng, *size, &cx);
b.iter_batched(
|| generate_random_rope_points(&mut rng, &rope),
@@ -216,7 +231,9 @@ fn rope_benchmarks(c: &mut Criterion) {
group.throughput(Throughput::Bytes(*size as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
let mut rng = StdRng::seed_from_u64(SEED);
let rope = generate_random_rope(&mut rng, *size);
let cx = TestAppContext::single();
let cx = cx.to_async();
let rope = generate_random_rope(&mut rng, *size, &cx);
b.iter_batched(
|| {