aquatic_ws: add bench for InMessage::from_ws_message, take ws msg by ref

This commit is contained in:
Joakim Frostegård 2020-08-11 05:36:29 +02:00
parent 74a538963f
commit 99724c7e5d
11 changed files with 1091 additions and 5 deletions

View file

@ -8,6 +8,11 @@ license = "Apache-2.0"
[lib]
name = "aquatic_ws_protocol"
[[bench]]
name = "bench_deserialize_announce_request"
path = "benches/bench_deserialize_announce_request.rs"
harness = false
[dependencies]
anyhow = "1"
hashbrown = { version = "0.8", features = ["serde"] }
@ -16,5 +21,6 @@ serde_json = "1"
tungstenite = "0.11"
[dev-dependencies]
criterion = "0.3"
quickcheck = "0.9"
quickcheck_macros = "0.9"

View file

@ -0,0 +1,55 @@
use std::time::Duration;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use aquatic_ws_protocol::*;
pub fn bench(c: &mut Criterion) {
let info_hash = InfoHash([
b'a', b'b', b'c', b'd', b'e',
b'?', b'\n', b'1', b'2', b'3',
0, 1, 2, 3, 4,
0, 1, 2, 3, 4,
]);
let peer_id = PeerId(info_hash.0);
let offers: Vec<AnnounceRequestOffer> = (0..10).map(|i| {
let mut offer_id = OfferId(info_hash.0);
offer_id.0[i] = i as u8;
AnnounceRequestOffer {
offer: JsonValue(::serde_json::json!({ "sdp": "abcdef" })),
offer_id,
}
}).collect();
let offers_len = offers.len();
let request = InMessage::AnnounceRequest(AnnounceRequest {
action: AnnounceAction,
info_hash,
peer_id,
bytes_left: Some(2),
event: Some(AnnounceEvent::Started),
offers: Some(offers),
numwant: Some(offers_len),
answer: Some(JsonValue(::serde_json::json!({ "sdp": "abcdef" }))),
to_peer_id: Some(peer_id),
offer_id: Some(OfferId(info_hash.0))
});
let ws_message = request.to_ws_message();
c.bench_function("deserialize-announce-request", |b| b.iter(||
InMessage::from_ws_message(black_box(&ws_message))
));
}
criterion_group!{
name = benches;
config = Criterion::default()
.sample_size(1000)
.measurement_time(Duration::from_secs(180))
.significance_level(0.01);
targets = bench
}
criterion_main!(benches);

View file

@ -258,16 +258,16 @@ pub enum InMessage {
impl InMessage {
#[inline]
pub fn from_ws_message(ws_message: tungstenite::Message) -> ::anyhow::Result<Self> {
pub fn from_ws_message(ws_message: &tungstenite::Message) -> ::anyhow::Result<Self> {
use tungstenite::Message::{Text, Binary};
let text = match ws_message {
Text(text) => text,
Binary(bytes) => String::from_utf8(bytes)?,
Binary(bytes) => ::std::str::from_utf8(bytes)?,
_ => return Err(anyhow::anyhow!("Message is neither text nor bytes")),
};
::serde_json::from_str(&text).context("serialize with serde")
::serde_json::from_str(text).context("serialize with serde")
}
pub fn to_ws_message(&self) -> ::tungstenite::Message {
@ -523,7 +523,7 @@ mod tests {
fn quickcheck_serde_identity_in_message(in_message_1: InMessage) -> bool {
let ws_message = in_message_1.to_ws_message();
let in_message_2 = InMessage::from_ws_message(ws_message.clone()).unwrap();
let in_message_2 = InMessage::from_ws_message(&ws_message).unwrap();
let success = in_message_1 == in_message_2;

View file

@ -0,0 +1 @@
{"group_id":"deserialize-announce-request","function_id":null,"value_str":null,"throughput":null,"full_id":"deserialize-announce-request","directory_name":"deserialize-announce-request","title":"deserialize-announce-request"}

View file

@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":18703.904042751496,"upper_bound":18792.03205243071},"point_estimate":18746.072800173675,"standard_error":22.574908262590952},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":18547.912025316455,"upper_bound":18605.846380105744},"point_estimate":18576.281397429004,"standard_error":15.686062550253332},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":306.28255537969375,"upper_bound":380.480602345445},"point_estimate":338.0236020241898,"standard_error":19.790518378924638},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":18658.020869749234,"upper_bound":18761.405070764362},"point_estimate":18706.576690779686,"standard_error":26.604673332450176},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":553.3799052716993,"upper_bound":868.3032654487926},"point_estimate":715.2362082741504,"standard_error":80.39906836878366}}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[16630.874818319186,17501.98981446029,19824.96313750323,20696.078133644332]