aquatic_http_protocol: add benchmark for request from bytes

This commit is contained in:
Joakim Frostegård 2020-07-20 20:27:42 +02:00
parent 95e25710dc
commit ea4b560faa
9 changed files with 1071 additions and 8 deletions

View file

@ -13,6 +13,11 @@ name = "bench_request_from_path"
path = "benches/bench_request_from_path.rs"
harness = false
[[bench]]
name = "bench_request_from_bytes"
path = "benches/bench_request_from_bytes.rs"
harness = false
[[bench]]
name = "bench_announce_response_to_bytes"
path = "benches/bench_announce_response_to_bytes.rs"

View file

@ -0,0 +1,24 @@
use std::time::Duration;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use aquatic_http_protocol::request::Request;
static INPUT: &[u8] = b"GET /announce?info_hash=%04%0bkV%3f%5cr%14%a6%b7%98%adC%c3%c9.%40%24%00%b9&peer_id=-TR2940-5ert69muw5t8&port=11000&uploaded=0&downloaded=0&left=0&numwant=0&key=3ab4b977&compact=1&supportcrypto=1&event=stopped HTTP/1.1\r\n\r\n";
pub fn bench(c: &mut Criterion) {
c.bench_function("request-from-bytes", |b| b.iter(||
Request::from_bytes(black_box(INPUT))
));
}
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

@ -109,6 +109,7 @@ impl ScrapeRequest {
}
#[derive(Debug)]
pub enum RequestParseError {
NeedMoreData,
Invalid(anyhow::Error),
@ -408,13 +409,8 @@ mod tests {
assert!(f("%å7").is_err());
}
#[test]
fn test_announce_request_from_path(){
let parsed_request = Request::from_http_get_path(
ANNOUNCE_REQUEST_PATH
).unwrap();
let reference_request = Request::Announce(AnnounceRequest {
fn get_reference_announce_request() -> Request {
Request::Announce(AnnounceRequest {
info_hash: InfoHash(REFERENCE_INFO_HASH),
peer_id: PeerId(REFERENCE_PEER_ID),
port: 12345,
@ -423,7 +419,33 @@ mod tests {
compact: true,
numwant: Some(0),
key: Some("4ab4b877".into())
});
})
}
#[test]
fn test_announce_request_from_bytes(){
let mut bytes = Vec::new();
bytes.extend_from_slice(b"GET ");
bytes.extend_from_slice(&ANNOUNCE_REQUEST_PATH.as_bytes());
bytes.extend_from_slice(b" HTTP/1.1\r\n\r\n");
let parsed_request = Request::from_bytes(
&bytes[..]
).unwrap();
let reference_request = get_reference_announce_request();
assert_eq!(parsed_request, reference_request);
}
#[test]
fn test_announce_request_from_path(){
let parsed_request = Request::from_http_get_path(
ANNOUNCE_REQUEST_PATH
).unwrap();
let reference_request = get_reference_announce_request();
assert_eq!(parsed_request, reference_request);
}

View file

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

View file

@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2460.1209520234065,"upper_bound":2496.3120750993653},"point_estimate":2477.735012452959,"standard_error":9.223219637832466},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2378.552109650183,"upper_bound":2392.9167858884143},"point_estimate":2386.0253054074483,"standard_error":3.7683770634335887},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":99.96596815329639,"upper_bound":120.92540240951352},"point_estimate":110.60694919175964,"standard_error":5.3506476356761885},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2438.3485065067393,"upper_bound":2469.501606349259},"point_estimate":2453.4596391963023,"standard_error":7.977121580504992},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":251.73297824646409,"upper_bound":332.1546916341356},"point_estimate":291.46617601681515,"standard_error":20.531098767805926}}

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 @@
[1795.8747498180473,2061.4607369455734,2769.6900359523097,3035.276023079836]