mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-14 10:31:21 +00:00
core/benches: Add rudimentary benchmark for PeerId::from_bytes and clone (#1875)
* core: Add rudimentary benchmark for PeerId::from_bytes and clone * .github/workflow: Include benchmarks To ensure changes through pull requests won't make benchmarks fail to compile or run, run them as part of CI.
This commit is contained in:
35
.github/workflows/ci.yml
vendored
35
.github/workflows/ci.yml
vendored
@ -140,6 +140,41 @@ jobs:
|
|||||||
command: clippy
|
command: clippy
|
||||||
args: -- -A clippy::mutable_key_type -A clippy::type_complexity
|
args: -- -A clippy::mutable_key_type -A clippy::type_complexity
|
||||||
|
|
||||||
|
run-benchmarks:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Cancel Previous Runs
|
||||||
|
uses: styfle/cancel-workflow-action@0.6.0
|
||||||
|
with:
|
||||||
|
access_token: ${{ github.token }}
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Cache CARGO_HOME
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.cargo
|
||||||
|
key: cargo-home-${{ hashFiles('Cargo.toml') }}
|
||||||
|
|
||||||
|
- name: Cache cargo build
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: target
|
||||||
|
key: cargo-build-target-${{ hashFiles('Cargo.toml') }}
|
||||||
|
|
||||||
|
- name: Run cargo bench
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: bench
|
||||||
|
args: --workspace
|
||||||
|
|
||||||
integration-test:
|
integration-test:
|
||||||
name: Integration tests
|
name: Integration tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
@ -41,6 +41,7 @@ ring = { version = "0.16.9", features = ["alloc", "std"], default-features = fal
|
|||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
async-std = "1.6.2"
|
async-std = "1.6.2"
|
||||||
|
criterion = "0.3"
|
||||||
libp2p-mplex = { path = "../muxers/mplex" }
|
libp2p-mplex = { path = "../muxers/mplex" }
|
||||||
libp2p-noise = { path = "../protocols/noise" }
|
libp2p-noise = { path = "../protocols/noise" }
|
||||||
libp2p-tcp = { path = "../transports/tcp", features = ["async-std"] }
|
libp2p-tcp = { path = "../transports/tcp", features = ["async-std"] }
|
||||||
@ -54,3 +55,7 @@ prost-build = "0.6"
|
|||||||
[features]
|
[features]
|
||||||
default = ["secp256k1"]
|
default = ["secp256k1"]
|
||||||
secp256k1 = ["libsecp256k1"]
|
secp256k1 = ["libsecp256k1"]
|
||||||
|
|
||||||
|
[[bench]]
|
||||||
|
name = "peer_id"
|
||||||
|
harness = false
|
||||||
|
50
core/benches/peer_id.rs
Normal file
50
core/benches/peer_id.rs
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
// Copyright 2020 Parity Technologies (UK) Ltd.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the "Software"),
|
||||||
|
// to deal in the Software without restriction, including without limitation
|
||||||
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
// and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
// Software is furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
|
||||||
|
use libp2p_core::{identity, PeerId};
|
||||||
|
|
||||||
|
fn from_bytes(c: &mut Criterion) {
|
||||||
|
let peer_id_bytes = identity::Keypair::generate_ed25519()
|
||||||
|
.public()
|
||||||
|
.into_peer_id()
|
||||||
|
.into_bytes();
|
||||||
|
|
||||||
|
c.bench_function("from_bytes", |b| {
|
||||||
|
b.iter(|| {
|
||||||
|
black_box(PeerId::from_bytes(peer_id_bytes.clone()).unwrap());
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn clone(c: &mut Criterion) {
|
||||||
|
let peer_id = identity::Keypair::generate_ed25519()
|
||||||
|
.public()
|
||||||
|
.into_peer_id();
|
||||||
|
|
||||||
|
c.bench_function("clone", |b| {
|
||||||
|
b.iter(|| {
|
||||||
|
black_box(peer_id.clone());
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
criterion_group!(peer_id, from_bytes, clone);
|
||||||
|
criterion_main!(peer_id);
|
Reference in New Issue
Block a user