Skip to content

Commit 73af150

Browse files
committed
Cleanup: remove remnants of rayon locking
1 parent 59c3f86 commit 73af150

File tree

1 file changed

+22
-48
lines changed

1 file changed

+22
-48
lines changed

src/worker/rayon.rs

Lines changed: 22 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::error::Result;
55
use crate::idct::dequantize_and_idct_block;
66
use crate::parser::Component;
77

8-
use std::sync::{Arc, Mutex};
8+
use std::sync::Arc;
99

1010
use super::{RowData, Worker};
1111

@@ -29,14 +29,12 @@ struct ComponentMetadata {
2929
}
3030

3131
pub struct Scoped {
32-
inner: Mutex<ImmediateWorker>,
32+
inner: ImmediateWorker,
3333
}
3434

3535
pub fn with_rayon<T>(f: impl FnOnce(&mut dyn Worker) -> T) -> T {
3636
let inner = ImmediateWorker::default();
37-
f(&mut Scoped {
38-
inner: Mutex::new(inner),
39-
})
37+
f(&mut Scoped { inner })
4038
}
4139

4240
impl ImmediateWorker {
@@ -74,24 +72,16 @@ impl ImmediateWorker {
7472
pub fn append_row_locked(
7573
quantization_table: Arc<[u16; 64]>,
7674
metadata: ComponentMetadata,
77-
(index, data): (usize, Vec<i16>),
78-
result_offset: usize,
75+
data: Vec<i16>,
7976
result_block: &mut [u8],
8077
) {
8178
// Convert coefficients from a MCU row to samples.
82-
let block_count;
83-
let line_stride;
84-
let block_width;
85-
let dct_scale;
86-
87-
{
88-
let metadata = metadata;
89-
90-
block_width = metadata.block_width;
91-
block_count = metadata.block_count;
92-
line_stride = metadata.line_stride;
93-
dct_scale = metadata.dct_scale;
94-
}
79+
let ComponentMetadata {
80+
block_count,
81+
line_stride,
82+
block_width,
83+
dct_scale,
84+
} = metadata;
9585

9686
assert_eq!(data.len(), block_count * 64);
9787

@@ -128,45 +118,31 @@ impl ImmediateWorker {
128118

129119
impl super::Worker for Scoped {
130120
fn start(&mut self, row_data: RowData) -> Result<()> {
131-
self.inner.get_mut().unwrap().start_immediate(row_data);
121+
self.inner.start_immediate(row_data);
132122
Ok(())
133123
}
134124

135125
fn append_row(&mut self, row: (usize, Vec<i16>)) -> Result<()> {
136-
let quantization_table;
137-
let metadata;
126+
let ref mut inner = self.inner;
138127
let (index, data) = row;
139-
let result_offset;
140-
let result_block;
141128

142-
{
143-
let mut inner = self.inner.get_mut().unwrap();
144-
quantization_table = inner.quantization_tables[index].as_ref().unwrap().clone();
145-
metadata = inner.component_metadata(index).unwrap();
129+
let quantization_table = inner.quantization_tables[index].as_ref().unwrap().clone();
130+
let metadata = inner.component_metadata(index).unwrap();
131+
let result_block = &mut inner.results[index][inner.offsets[index]..];
132+
inner.offsets[index] += metadata.bytes_used();
146133

147-
result_offset = inner.offsets[index];
148-
result_block = &mut inner.results[index][inner.offsets[index]..];
149-
inner.offsets[index] += metadata.bytes_used();
150-
}
151-
152-
ImmediateWorker::append_row_locked(
153-
quantization_table,
154-
metadata,
155-
(index, data),
156-
result_offset,
157-
result_block,
158-
);
134+
ImmediateWorker::append_row_locked(quantization_table, metadata, data, result_block);
159135
Ok(())
160136
}
161137

162138
fn get_result(&mut self, index: usize) -> Result<Vec<u8>> {
163-
let result = self.inner.get_mut().unwrap().get_result_immediate(index);
139+
let result = self.inner.get_result_immediate(index);
164140
Ok(result)
165141
}
166142

167143
// Magic sauce, these _may_ run in parallel.
168144
fn append_rows(&mut self, iter: &mut dyn Iterator<Item = (usize, Vec<i16>)>) -> Result<()> {
169-
let inner = self.inner.get_mut().unwrap();
145+
let ref mut inner = self.inner;
170146
rayon::in_place_scope(|scope| {
171147
let metadatas = [
172148
inner.component_metadata(0),
@@ -193,18 +169,16 @@ impl super::Worker for Scoped {
193169
let metadata = metadatas[index].unwrap();
194170
let quantization_table = inner.quantization_tables[index].as_ref().unwrap().clone();
195171

196-
let result_offset = inner.offsets[index];
197-
let (result_block, tail) = core::mem::replace(&mut result_blocks[index], &mut [])
172+
inner.offsets[index] += metadata.bytes_used();
173+
let (result_block, tail) = core::mem::take(&mut result_blocks[index])
198174
.split_at_mut(metadata.bytes_used());
199175
result_blocks[index] = tail;
200-
inner.offsets[index] += metadata.bytes_used();
201176

202177
scope.spawn(move |_| {
203178
ImmediateWorker::append_row_locked(
204179
quantization_table,
205180
metadata,
206-
(index, data),
207-
result_offset,
181+
data,
208182
result_block,
209183
)
210184
});

0 commit comments

Comments
 (0)