Improve performance of blocking

This commit is contained in:
Jan-Henrik 2024-03-19 22:11:06 +01:00
parent 54c987e784
commit 1d4c93b4da

View file

@ -40,23 +40,25 @@ impl StreamerBackend {
)) ))
.map(move |_| { .map(move |_| {
let mut buffer = [0_i16; BUFFER_SIZE]; let mut buffer = [0_i16; BUFFER_SIZE];
renderer.on_start_of_batch(); renderer.on_start_of_batch();
buffer.fill_with(|| { tokio::task::block_in_place(|| {
let sample = renderer buffer.fill_with(|| {
.next_sample() let sample = renderer
.expect("renderer should never return an Error"); .next_sample()
let sample = match sample { .expect("renderer should never return an Error");
awedio::NextSample::Sample(s) => s, let sample = match sample {
awedio::NextSample::MetadataChanged => { awedio::NextSample::Sample(s) => s,
unreachable!("we never change metadata mid-batch") awedio::NextSample::MetadataChanged => {
} unreachable!("we never change metadata mid-batch")
awedio::NextSample::Paused => 0, }
awedio::NextSample::Finished => 0, awedio::NextSample::Paused => 0,
}; awedio::NextSample::Finished => 0,
sample };
sample
});
});
Box::new(buffer)
}); });
Box::new(buffer)
});
loop { loop {
s.broadcast(stream.next().await.expect("Should not end!")) s.broadcast(stream.next().await.expect("Should not end!"))