Skip to content

Commit cbeff71

Browse files
committed
wip: migrate benchmarks to use PayloadValue
1 parent ddf322b commit cbeff71

File tree

3 files changed

+74
-38
lines changed

3 files changed

+74
-38
lines changed

socketioxide/benches/packet_decode.rs

+20-19
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
use bytes::Bytes;
12
use criterion::{black_box, criterion_group, criterion_main, Criterion};
23
use engineioxide::sid::Sid;
34
use socketioxide::{
45
packet::{Packet, PacketData},
5-
ProtocolVersion,
6+
PayloadValue, ProtocolVersion,
67
};
78
fn criterion_benchmark(c: &mut Criterion) {
89
c.bench_function("Decode packet connect on /", |b| {
@@ -26,7 +27,7 @@ fn criterion_benchmark(c: &mut Criterion) {
2627
const DATA: &str = r#"{"_placeholder":true,"num":0}"#;
2728
const BINARY: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
2829
c.bench_function("Decode packet event on /", |b| {
29-
let data = serde_json::to_value(DATA).unwrap();
30+
let data = PayloadValue::from_data(DATA).unwrap();
3031
let packet: String =
3132
Packet::event(black_box("/"), black_box("event"), black_box(data.clone()))
3233
.try_into()
@@ -35,7 +36,7 @@ fn criterion_benchmark(c: &mut Criterion) {
3536
});
3637

3738
c.bench_function("Decode packet event on /custom_nsp", |b| {
38-
let data = serde_json::to_value(DATA).unwrap();
39+
let data = PayloadValue::from_data(DATA).unwrap();
3940
let packet: String = Packet::event(
4041
black_box("custom_nsp"),
4142
black_box("event"),
@@ -47,7 +48,7 @@ fn criterion_benchmark(c: &mut Criterion) {
4748
});
4849

4950
c.bench_function("Decode packet event with ack on /", |b| {
50-
let data = serde_json::to_value(DATA).unwrap();
51+
let data = PayloadValue::from_data(DATA).unwrap();
5152
let packet: Packet =
5253
Packet::event(black_box("/"), black_box("event"), black_box(data.clone()));
5354
match packet.inner {
@@ -59,7 +60,7 @@ fn criterion_benchmark(c: &mut Criterion) {
5960
});
6061

6162
c.bench_function("Decode packet event with ack on /custom_nsp", |b| {
62-
let data = serde_json::to_value(DATA).unwrap();
63+
let data = PayloadValue::from_data(DATA).unwrap();
6364
let packet = Packet::event(
6465
black_box("/custom_nsp"),
6566
black_box("event"),
@@ -75,15 +76,15 @@ fn criterion_benchmark(c: &mut Criterion) {
7576
});
7677

7778
c.bench_function("Decode packet ack on /", |b| {
78-
let data = serde_json::to_value(DATA).unwrap();
79+
let data = PayloadValue::from_data(DATA).unwrap();
7980
let packet: String = Packet::ack(black_box("/"), black_box(data.clone()), black_box(0))
8081
.try_into()
8182
.unwrap();
8283
b.iter(|| Packet::try_from(packet.clone()).unwrap())
8384
});
8485

8586
c.bench_function("Decode packet ack on /custom_nsp", |b| {
86-
let data = serde_json::to_value(DATA).unwrap();
87+
let data = PayloadValue::from_data(DATA).unwrap();
8788
let packet: String = Packet::ack(
8889
black_box("/custom_nsp"),
8990
black_box(data.clone()),
@@ -95,51 +96,51 @@ fn criterion_benchmark(c: &mut Criterion) {
9596
});
9697

9798
c.bench_function("Decode packet binary event (b64) on /", |b| {
98-
let data = serde_json::to_value(DATA).unwrap();
99-
let packet: String = Packet::bin_event(
99+
let data = PayloadValue::from_data(DATA).unwrap();
100+
let packet: String = Packet::bin_event_with_payloads(
100101
black_box("/"),
101102
black_box("event"),
102103
black_box(data.clone()),
103-
black_box(vec![BINARY.to_vec().clone()]),
104+
black_box(vec![Bytes::from_static(&BINARY)]),
104105
)
105106
.try_into()
106107
.unwrap();
107108
b.iter(|| Packet::try_from(packet.clone()).unwrap())
108109
});
109110

110111
c.bench_function("Decode packet binary event (b64) on /custom_nsp", |b| {
111-
let data = serde_json::to_value(DATA).unwrap();
112-
let packet: String = Packet::bin_event(
112+
let data = PayloadValue::from_data(DATA).unwrap();
113+
let packet: String = Packet::bin_event_with_payloads(
113114
black_box("/custom_nsp"),
114115
black_box("event"),
115116
black_box(data.clone()),
116-
black_box(vec![BINARY.to_vec().clone()]),
117+
black_box(vec![Bytes::from_static(&BINARY)]),
117118
)
118119
.try_into()
119120
.unwrap();
120121
b.iter(|| Packet::try_from(packet.clone()).unwrap())
121122
});
122123

123124
c.bench_function("Decode packet binary ack (b64) on /", |b| {
124-
let data = serde_json::to_value(DATA).unwrap();
125-
let packet: String = Packet::bin_ack(
125+
let data = PayloadValue::from_data(DATA).unwrap();
126+
let packet: String = Packet::bin_ack_with_payloads(
126127
black_box("/"),
127128
black_box(data.clone()),
128-
black_box(vec![BINARY.to_vec().clone()]),
129129
black_box(0),
130+
black_box(vec![Bytes::from_static(&BINARY)]),
130131
)
131132
.try_into()
132133
.unwrap();
133134
b.iter(|| Packet::try_from(packet.clone()).unwrap())
134135
});
135136

136137
c.bench_function("Decode packet binary ack (b64) on /custom_nsp", |b| {
137-
let data = serde_json::to_value(DATA).unwrap();
138-
let packet: String = Packet::bin_ack(
138+
let data = PayloadValue::from_data(DATA).unwrap();
139+
let packet: String = Packet::bin_ack_with_payloads(
139140
black_box("/custom_nsp"),
140141
black_box(data.clone()),
141-
black_box(vec![BINARY.to_vec().clone()]),
142142
black_box(0),
143+
black_box(vec![Bytes::from_static(&BINARY)]),
143144
)
144145
.try_into()
145146
.unwrap();

socketioxide/benches/packet_encode.rs

+20-19
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
use bytes::Bytes;
12
use criterion::{black_box, criterion_group, criterion_main, Criterion};
23
use engineioxide::sid::Sid;
34
use socketioxide::{
45
packet::{Packet, PacketData},
5-
ProtocolVersion,
6+
PayloadValue, ProtocolVersion,
67
};
78
fn criterion_benchmark(c: &mut Criterion) {
89
c.bench_function("Encode packet connect on /", |b| {
@@ -25,15 +26,15 @@ fn criterion_benchmark(c: &mut Criterion) {
2526
const DATA: &str = r#"{"_placeholder":true,"num":0}"#;
2627
const BINARY: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
2728
c.bench_function("Encode packet event on /", |b| {
28-
let data = serde_json::to_value(DATA).unwrap();
29+
let data = PayloadValue::from_data(DATA).unwrap();
2930
let packet = Packet::event(black_box("/"), black_box("event"), black_box(data.clone()));
3031
b.iter(|| {
3132
let _: String = packet.clone().try_into().unwrap();
3233
})
3334
});
3435

3536
c.bench_function("Encode packet event on /custom_nsp", |b| {
36-
let data = serde_json::to_value(DATA).unwrap();
37+
let data = PayloadValue::from_data(DATA).unwrap();
3738
let packet = Packet::event(
3839
black_box("custom_nsp"),
3940
black_box("event"),
@@ -45,7 +46,7 @@ fn criterion_benchmark(c: &mut Criterion) {
4546
});
4647

4748
c.bench_function("Encode packet event with ack on /", |b| {
48-
let data = serde_json::to_value(DATA).unwrap();
49+
let data = PayloadValue::from_data(DATA).unwrap();
4950
let packet = Packet::event(black_box("/"), black_box("event"), black_box(data.clone()));
5051
match packet.inner {
5152
PacketData::Event(_, _, mut ack) => ack.insert(black_box(0)),
@@ -57,7 +58,7 @@ fn criterion_benchmark(c: &mut Criterion) {
5758
});
5859

5960
c.bench_function("Encode packet event with ack on /custom_nsp", |b| {
60-
let data = serde_json::to_value(DATA).unwrap();
61+
let data = PayloadValue::from_data(DATA).unwrap();
6162
let packet = Packet::event(
6263
black_box("/custom_nsp"),
6364
black_box("event"),
@@ -73,15 +74,15 @@ fn criterion_benchmark(c: &mut Criterion) {
7374
});
7475

7576
c.bench_function("Encode packet ack on /", |b| {
76-
let data = serde_json::to_value(DATA).unwrap();
77+
let data = PayloadValue::from_data(DATA).unwrap();
7778
let packet = Packet::ack(black_box("/"), black_box(data.clone()), black_box(0));
7879
b.iter(|| {
7980
let _: String = packet.clone().try_into().unwrap();
8081
})
8182
});
8283

8384
c.bench_function("Encode packet ack on /custom_nsp", |b| {
84-
let data = serde_json::to_value(DATA).unwrap();
85+
let data = PayloadValue::from_data(DATA).unwrap();
8586
let packet = Packet::ack(
8687
black_box("/custom_nsp"),
8788
black_box(data.clone()),
@@ -93,51 +94,51 @@ fn criterion_benchmark(c: &mut Criterion) {
9394
});
9495

9596
c.bench_function("Encode packet binary event (b64) on /", |b| {
96-
let data = serde_json::to_value(DATA).unwrap();
97-
let packet = Packet::bin_event(
97+
let data = PayloadValue::from_data(DATA).unwrap();
98+
let packet = Packet::bin_event_with_payloads(
9899
black_box("/"),
99100
black_box("event"),
100101
black_box(data.clone()),
101-
black_box(vec![BINARY.to_vec().clone()]),
102+
black_box(vec![Bytes::from_static(&BINARY)]),
102103
);
103104
b.iter(|| {
104105
let _: String = packet.clone().try_into().unwrap();
105106
})
106107
});
107108

108109
c.bench_function("Encode packet binary event (b64) on /custom_nsp", |b| {
109-
let data = serde_json::to_value(DATA).unwrap();
110-
let packet = Packet::bin_event(
110+
let data = PayloadValue::from_data(DATA).unwrap();
111+
let packet = Packet::bin_event_with_payloads(
111112
black_box("/custom_nsp"),
112113
black_box("event"),
113114
black_box(data.clone()),
114-
black_box(vec![BINARY.to_vec().clone()]),
115+
black_box(vec![Bytes::from_static(&BINARY)]),
115116
);
116117
b.iter(|| {
117118
let _: String = packet.clone().try_into().unwrap();
118119
})
119120
});
120121

121122
c.bench_function("Encode packet binary ack (b64) on /", |b| {
122-
let data = serde_json::to_value(DATA).unwrap();
123-
let packet = Packet::bin_ack(
123+
let data = PayloadValue::from_data(DATA).unwrap();
124+
let packet = Packet::bin_ack_with_payloads(
124125
black_box("/"),
125126
black_box(data.clone()),
126-
black_box(vec![BINARY.to_vec().clone()]),
127127
black_box(0),
128+
black_box(vec![Bytes::from_static(&BINARY)]),
128129
);
129130
b.iter(|| {
130131
let _: String = packet.clone().try_into().unwrap();
131132
})
132133
});
133134

134135
c.bench_function("Encode packet binary ack (b64) on /custom_nsp", |b| {
135-
let data = serde_json::to_value(DATA).unwrap();
136-
let packet = Packet::bin_ack(
136+
let data = PayloadValue::from_data(DATA).unwrap();
137+
let packet = Packet::bin_ack_with_payloads(
137138
black_box("/custom_nsp"),
138139
black_box(data.clone()),
139-
black_box(vec![BINARY.to_vec().clone()]),
140140
black_box(0),
141+
black_box(vec![Bytes::from_static(&BINARY)]),
141142
);
142143
b.iter(|| {
143144
let _: String = packet.clone().try_into().unwrap();

socketioxide/src/packet.rs

+34
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,23 @@ impl<'a> Packet<'a> {
102102
}
103103
}
104104

105+
/// Create a binary event packet for the given namespace, with binary payloads
106+
pub fn bin_event_with_payloads(
107+
ns: impl Into<Cow<'a, str>>,
108+
e: impl Into<Cow<'a, str>>,
109+
data: PayloadValue,
110+
bins: Vec<Bytes>,
111+
) -> Self {
112+
let mut packet = BinaryPacket::outgoing(data);
113+
for bin in bins {
114+
packet.add_payload(bin);
115+
}
116+
Self {
117+
inner: PacketData::BinaryEvent(e.into(), packet, None),
118+
ns: ns.into(),
119+
}
120+
}
121+
105122
/// Create an ack packet for the given namespace
106123
pub fn ack(ns: &'a str, data: PayloadValue, ack: i64) -> Self {
107124
Self {
@@ -119,6 +136,23 @@ impl<'a> Packet<'a> {
119136
}
120137
}
121138

139+
/// Create a binary ack packet for the given namespace, with binary payloads
140+
pub fn bin_ack_with_payloads(
141+
ns: &'a str,
142+
data: PayloadValue,
143+
ack: i64,
144+
bins: Vec<Bytes>,
145+
) -> Self {
146+
let mut packet = BinaryPacket::outgoing(data);
147+
for bin in bins {
148+
packet.add_payload(bin);
149+
}
150+
Self {
151+
inner: PacketData::BinaryAck(packet, ack),
152+
ns: Cow::Borrowed(ns),
153+
}
154+
}
155+
122156
/// Get the max size the packet could have when serialized
123157
/// This is used to pre-allocate a buffer for the packet
124158
///

0 commit comments

Comments
 (0)