Add some additional decode benchmarks

This commit is contained in:
Ryan Leckey 2019-06-28 00:30:43 -07:00
parent 903f674257
commit c59e65d65b
3 changed files with 27 additions and 13 deletions

View File

@ -3,17 +3,30 @@ extern crate criterion;
use bytes::Bytes; use bytes::Bytes;
use criterion::{black_box, Criterion}; use criterion::{black_box, Criterion};
use sqlx_postgres_protocol::{Decode, Response}; use sqlx_postgres_protocol::{Decode, ParameterStatus, BackendKeyData, Response};
fn criterion_benchmark(c: &mut Criterion) { fn criterion_benchmark(c: &mut Criterion) {
// NOTE: This is sans header (for direct decoding)
const NOTICE_RESPONSE: &[u8] = b"SNOTICE\0VNOTICE\0C42710\0Mextension \"uuid-ossp\" already exists, skipping\0Fextension.c\0L1656\0RCreateExtension\0\0"; const NOTICE_RESPONSE: &[u8] = b"SNOTICE\0VNOTICE\0C42710\0Mextension \"uuid-ossp\" already exists, skipping\0Fextension.c\0L1656\0RCreateExtension\0\0";
const PARAM_STATUS: &[u8] = b"session_authorization\0postgres\0";
const BACKEND_KEY_DATA: &[u8] = b"\0\0'\xc6\x89R\xc5+";
c.bench_function("decode Response", |b| { c.bench_function("decode Response", |b| {
b.iter(|| { b.iter(|| {
let _ = Response::decode(black_box(Bytes::from_static(NOTICE_RESPONSE))).unwrap(); let _ = Response::decode(black_box(Bytes::from_static(NOTICE_RESPONSE))).unwrap();
}) })
}); });
c.bench_function("decode BackendKeyData", |b| {
b.iter(|| {
let _ = BackendKeyData::decode(black_box(Bytes::from_static(BACKEND_KEY_DATA))).unwrap();
})
});
c.bench_function("decode ParameterStatus", |b| {
b.iter(|| {
let _ = ParameterStatus::decode(black_box(Bytes::from_static(PARAM_STATUS))).unwrap();
})
});
} }
criterion_group!(benches, criterion_benchmark); criterion_group!(benches, criterion_benchmark);

View File

@ -5,11 +5,10 @@ use criterion::Criterion;
use sqlx_postgres_protocol::{Encode, PasswordMessage, Response, Severity, StartupMessage}; use sqlx_postgres_protocol::{Encode, PasswordMessage, Response, Severity, StartupMessage};
fn criterion_benchmark(c: &mut Criterion) { fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("encode Response(Builder)", |b| { c.bench_function("encode Response::builder()", |b| {
let mut dst = Vec::new(); let mut dst = Vec::new();
b.iter(|| { b.iter(|| {
dst.truncate(0); dst.clear();
Response::builder() Response::builder()
.severity(Severity::Notice) .severity(Severity::Notice)
.code("42710") .code("42710")
@ -22,11 +21,10 @@ fn criterion_benchmark(c: &mut Criterion) {
}) })
}); });
c.bench_function("encode Password(Cleartext)", |b| { c.bench_function("encode PasswordMessage::cleartext", |b| {
let mut dst = Vec::new(); let mut dst = Vec::new();
b.iter(|| { b.iter(|| {
dst.truncate(0); dst.clear();
PasswordMessage::cleartext("8e323AMF9YSE9zftFnuhQcvhz7Vf342W4cWU") PasswordMessage::cleartext("8e323AMF9YSE9zftFnuhQcvhz7Vf342W4cWU")
.encode(&mut dst) .encode(&mut dst)
.unwrap(); .unwrap();
@ -36,11 +34,15 @@ fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("encode StartupMessage", |b| { c.bench_function("encode StartupMessage", |b| {
let mut dst = Vec::new(); let mut dst = Vec::new();
b.iter(|| { b.iter(|| {
dst.truncate(0); dst.clear();
StartupMessage::builder() StartupMessage::builder()
.param("user", "postgres") .param("user", "postgres")
.param("database", "postgres") .param("database", "postgres")
.param("DateStyle", "ISO, MDY")
.param("IntervalStyle", "iso_8601")
.param("TimeZone", "UTC")
.param("extra_float_digits", "3")
.param("client_encoding", "UTF-8")
.build() .build()
.encode(&mut dst) .encode(&mut dst)
.unwrap(); .unwrap();
@ -50,8 +52,7 @@ fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("encode Password(MD5)", |b| { c.bench_function("encode Password(MD5)", |b| {
let mut dst = Vec::new(); let mut dst = Vec::new();
b.iter(|| { b.iter(|| {
dst.truncate(0); dst.clear();
PasswordMessage::md5( PasswordMessage::md5(
"8e323AMF9YSE9zftFnuhQcvhz7Vf342W4cWU", "8e323AMF9YSE9zftFnuhQcvhz7Vf342W4cWU",
"postgres", "postgres",

View File

@ -84,7 +84,7 @@ async fn receiver(
mut reader: ReadHalf<TcpStream>, mut reader: ReadHalf<TcpStream>,
mut sender: mpsc::UnboundedSender<Message>, mut sender: mpsc::UnboundedSender<Message>,
) -> io::Result<()> { ) -> io::Result<()> {
let mut rbuf = BytesMut::with_capacity(0); let mut rbuf = BytesMut::with_capacity(1024);
let mut len = 0; let mut len = 0;
loop { loop {