use super::cmd::git_info;
use super::refs::ExportHead;
use super::wire;
use crate::snapshot::RepoSnapshot;
fn refs(refs: usize) -> (RepoSnapshot, ExportHead) {
let oid = |n: usize| format!("{n:040x}");
let mut public_refs = Vec::new();
for n in 0..refs {
public_refs.push(crate::snapshot::PublicRef {
name: format!("refs/heads/branch-{n}"),
raw: oid(n),
peeled: None,
});
public_refs.push(crate::snapshot::PublicRef {
name: format!("refs/tags/v{n}"),
raw: oid(refs + n),
peeled: Some(oid(n)),
});
}
let snapshot = RepoSnapshot {
repo_did: knot_types::RepoDid::new("did:plc:bench").unwrap(),
owner: knot_types::OwnerDid::new("did:plc:owner").unwrap(),
rkey: knot_types::RepoRkey::new("bench").unwrap(),
name: None,
head_capture: crate::snapshot::HeadCapture {
resolved: Some(oid(0)),
symbolic: Some("refs/heads/branch-0".to_string()),
unborn: false,
},
public_refs,
cob_refs: Vec::new(),
object_format: knot_types::ObjectFormat::SHA1,
};
let head = ExportHead {
symbolic: Some("refs/heads/branch-0".to_string()),
oid: Some(oid(0)),
};
git_info().unwrap();
(snapshot, head)
}
#[divan::bench(args = [10, 1_000])]
fn v0_advertisement(bencher: divan::Bencher, refs: usize) {
let (snapshot, head) = self::refs(refs);
bencher.bench_local(|| divan::black_box(wire::v0_advertisement(&snapshot, &head).unwrap()));
}
#[divan::bench(args = [10, 1_000])]
fn ls_refs(bencher: divan::Bencher, refs: usize) {
let (snapshot, head) = self::refs(refs);
bencher.bench_local(|| divan::black_box(wire::v2_ls_refs(&snapshot, Some(&head), true)));
}