Skip to content

Commit 641cdcc

Browse files
committed
Store the processing state as an Arc.
1 parent 9a0c047 commit 641cdcc

File tree

4 files changed

+17
-27
lines changed

4 files changed

+17
-27
lines changed

crates/bevy_asset/src/io/processor_gated.rs

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
io::{AssetReader, AssetReaderError, AssetSourceId, PathStream, Reader},
3-
processor::{AssetProcessorData, ProcessStatus},
3+
processor::{ProcessStatus, ProcessingState},
44
AssetPath,
55
};
66
use alloc::{borrow::ToOwned, boxed::Box, sync::Arc, vec::Vec};
@@ -16,23 +16,23 @@ use super::{AsyncSeekForward, ErasedAssetReader};
1616
/// given path until that path has been processed by [`AssetProcessor`].
1717
///
1818
/// [`AssetProcessor`]: crate::processor::AssetProcessor
19-
pub struct ProcessorGatedReader {
19+
pub(crate) struct ProcessorGatedReader {
2020
reader: Box<dyn ErasedAssetReader>,
2121
source: AssetSourceId<'static>,
22-
processor_data: Arc<AssetProcessorData>,
22+
processing_state: Arc<ProcessingState>,
2323
}
2424

2525
impl ProcessorGatedReader {
2626
/// Creates a new [`ProcessorGatedReader`].
27-
pub fn new(
27+
pub(crate) fn new(
2828
source: AssetSourceId<'static>,
2929
reader: Box<dyn ErasedAssetReader>,
30-
processor_data: Arc<AssetProcessorData>,
30+
processing_state: Arc<ProcessingState>,
3131
) -> Self {
3232
Self {
3333
source,
34-
processor_data,
3534
reader,
35+
processing_state,
3636
}
3737
}
3838
}
@@ -42,7 +42,6 @@ impl AssetReader for ProcessorGatedReader {
4242
let asset_path = AssetPath::from(path.to_path_buf()).with_source(self.source.clone());
4343
trace!("Waiting for processing to finish before reading {asset_path}");
4444
let process_result = self
45-
.processor_data
4645
.processing_state
4746
.wait_until_processed(asset_path.clone())
4847
.await;
@@ -54,7 +53,6 @@ impl AssetReader for ProcessorGatedReader {
5453
}
5554
trace!("Processing finished with {asset_path}, reading {process_result:?}",);
5655
let lock = self
57-
.processor_data
5856
.processing_state
5957
.get_transaction_lock(&asset_path)
6058
.await?;
@@ -67,7 +65,6 @@ impl AssetReader for ProcessorGatedReader {
6765
let asset_path = AssetPath::from(path.to_path_buf()).with_source(self.source.clone());
6866
trace!("Waiting for processing to finish before reading meta for {asset_path}",);
6967
let process_result = self
70-
.processor_data
7168
.processing_state
7269
.wait_until_processed(asset_path.clone())
7370
.await;
@@ -79,7 +76,6 @@ impl AssetReader for ProcessorGatedReader {
7976
}
8077
trace!("Processing finished with {process_result:?}, reading meta for {asset_path}",);
8178
let lock = self
82-
.processor_data
8379
.processing_state
8480
.get_transaction_lock(&asset_path)
8581
.await?;
@@ -96,10 +92,7 @@ impl AssetReader for ProcessorGatedReader {
9692
"Waiting for processing to finish before reading directory {:?}",
9793
path
9894
);
99-
self.processor_data
100-
.processing_state
101-
.wait_until_finished()
102-
.await;
95+
self.processing_state.wait_until_finished().await;
10396
trace!("Processing finished, reading directory {:?}", path);
10497
let result = self.reader.read_directory(path).await?;
10598
Ok(result)
@@ -110,10 +103,7 @@ impl AssetReader for ProcessorGatedReader {
110103
"Waiting for processing to finish before reading directory {:?}",
111104
path
112105
);
113-
self.processor_data
114-
.processing_state
115-
.wait_until_finished()
116-
.await;
106+
self.processing_state.wait_until_finished().await;
117107
trace!("Processing finished, getting directory status {:?}", path);
118108
let result = self.reader.is_directory(path).await?;
119109
Ok(result)

crates/bevy_asset/src/io/source.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
io::{processor_gated::ProcessorGatedReader, AssetSourceEvent, AssetWatcher},
3-
processor::AssetProcessorData,
3+
processor::ProcessingState,
44
};
55
use alloc::{
66
boxed::Box,
@@ -560,12 +560,12 @@ impl AssetSource {
560560

561561
/// This will cause processed [`AssetReader`](crate::io::AssetReader) futures (such as [`AssetReader::read`](crate::io::AssetReader::read)) to wait until
562562
/// the [`AssetProcessor`](crate::AssetProcessor) has finished processing the requested asset.
563-
pub fn gate_on_processor(&mut self, processor_data: Arc<AssetProcessorData>) {
563+
pub(crate) fn gate_on_processor(&mut self, processing_state: Arc<ProcessingState>) {
564564
if let Some(reader) = self.processed_reader.take() {
565565
self.processed_reader = Some(Box::new(ProcessorGatedReader::new(
566566
self.id(),
567567
reader,
568-
processor_data,
568+
processing_state,
569569
)));
570570
}
571571
}
@@ -622,9 +622,9 @@ impl AssetSources {
622622

623623
/// This will cause processed [`AssetReader`](crate::io::AssetReader) futures (such as [`AssetReader::read`](crate::io::AssetReader::read)) to wait until
624624
/// the [`AssetProcessor`](crate::AssetProcessor) has finished processing the requested asset.
625-
pub fn gate_on_processor(&mut self, processor_data: Arc<AssetProcessorData>) {
625+
pub(crate) fn gate_on_processor(&mut self, processing_state: Arc<ProcessingState>) {
626626
for source in self.iter_processed_mut() {
627-
source.gate_on_processor(processor_data.clone());
627+
source.gate_on_processor(processing_state.clone());
628628
}
629629
}
630630
}

crates/bevy_asset/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ impl Plugin for AssetPlugin {
390390
let mut builders = app.world_mut().resource_mut::<AssetSourceBuilders>();
391391
let processor = AssetProcessor::new(&mut builders);
392392
let mut sources = builders.build_sources(false, watch);
393-
sources.gate_on_processor(processor.data.clone());
393+
sources.gate_on_processor(processor.data.processing_state.clone());
394394
// the main asset server shares loaders with the processor asset server
395395
app.insert_resource(AssetServer::new_with_loaders(
396396
sources,

crates/bevy_asset/src/processor/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ pub struct AssetProcessor {
105105
/// Internal data stored inside an [`AssetProcessor`].
106106
pub struct AssetProcessorData {
107107
/// The state of processing.
108-
pub(crate) processing_state: ProcessingState,
108+
pub(crate) processing_state: Arc<ProcessingState>,
109109
/// The factory that creates the transaction log.
110110
///
111111
/// Note: we use a regular Mutex instead of an async mutex since we expect users to only set
@@ -139,7 +139,7 @@ impl AssetProcessor {
139139
let data = Arc::new(AssetProcessorData::new(source.build_sources(true, false)));
140140
// The asset processor uses its own asset server with its own id space
141141
let mut sources = source.build_sources(false, false);
142-
sources.gate_on_processor(data.clone());
142+
sources.gate_on_processor(data.processing_state.clone());
143143
let server = AssetServer::new_with_meta_check(
144144
sources,
145145
AssetServerMode::Processed,
@@ -1212,7 +1212,7 @@ impl AssetProcessorData {
12121212
/// Initializes a new [`AssetProcessorData`] using the given [`AssetSources`].
12131213
pub fn new(source: AssetSources) -> Self {
12141214
AssetProcessorData {
1215-
processing_state: ProcessingState::new(),
1215+
processing_state: Arc::new(ProcessingState::new()),
12161216
sources: source,
12171217
log_factory: Mutex::new(Some(Box::new(FileTransactionLogFactory::default()))),
12181218
log: Default::default(),

0 commit comments

Comments
 (0)