Skip to content

Commit e418fd7

Browse files
committed
Use a BufReader to speed up streaming of profile.json.gz
Profiles with a 75MB profile.json.gz file: No BufReader: https://share.firefox.dev/3VaC66Y (630ms) 8 KiB buffer: https://share.firefox.dev/3Kf68nH (310ms) 64 KiB buffer: https://share.firefox.dev/3JPmV0L (114ms) 1 MiB buffer: https://share.firefox.dev/46cgFrg (125ms)
1 parent 8fa108f commit e418fd7

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

samply/src/server.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use hyper::{header, Method, Request, Response, StatusCode};
1616
use hyper_util::rt::TokioIo;
1717
use percent_encoding::{utf8_percent_encode, AsciiSet, CONTROLS};
1818
use rand::RngCore;
19+
use tokio::io::BufReader;
1920
use tokio::net::TcpListener;
2021
use tokio_util::io::ReaderStream;
2122
use wholesym::SymbolManager;
@@ -333,8 +334,9 @@ async fn symbolication_service(
333334
.await
334335
.expect("couldn't open profile file");
335336

336-
// Wrap in a tokio_util::io::ReaderStream
337-
let reader_stream = ReaderStream::new(file);
337+
// Wrap in a buffered tokio_util::io::ReaderStream
338+
let reader = BufReader::with_capacity(64 * 1024, file);
339+
let reader_stream = ReaderStream::new(reader);
338340

339341
let stream_body = StreamBody::new(reader_stream.map_ok(Frame::data));
340342
*response.body_mut() = Either::Right(stream_body.boxed());

0 commit comments

Comments
 (0)