Skip to content

Commit 55e923c

Browse files
committed
Merge the processors with the default_processors into a single struct.
1 parent cc4398e commit 55e923c

File tree

1 file changed

+30
-19
lines changed
  • crates/bevy_asset/src/processor

1 file changed

+30
-19
lines changed

crates/bevy_asset/src/processor/mod.rs

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,8 @@ pub struct AssetProcessor {
101101
pub struct AssetProcessorData {
102102
pub(crate) asset_infos: async_lock::RwLock<ProcessorAssetInfos>,
103103
log: async_lock::RwLock<Option<ProcessorTransactionLog>>,
104-
processors: RwLock<HashMap<&'static str, Arc<dyn ErasedProcessor>>>,
105-
/// Default processors for file extensions
106-
default_processors: RwLock<HashMap<Box<str>, &'static str>>,
104+
/// The processors that will be used to process assets.
105+
processors: RwLock<Processors>,
107106
state: async_lock::RwLock<ProcessorState>,
108107
sources: AssetSources,
109108
initialized_sender: async_broadcast::Sender<()>,
@@ -112,6 +111,15 @@ pub struct AssetProcessorData {
112111
finished_receiver: async_broadcast::Receiver<()>,
113112
}
114113

114+
#[derive(Default)]
115+
struct Processors {
116+
/// Maps the type name of the processor to its instance.
117+
type_name_to_processor: HashMap<&'static str, Arc<dyn ErasedProcessor>>,
118+
/// Maps the file extension of an asset to the type name of the processor we should use to
119+
/// process it by default.
120+
file_extension_to_default_processor: HashMap<Box<str>, &'static str>,
121+
}
122+
115123
impl AssetProcessor {
116124
/// Creates a new [`AssetProcessor`] instance.
117125
pub fn new(source: &mut AssetSourceBuilders) -> Self {
@@ -583,40 +591,41 @@ impl AssetProcessor {
583591

584592
/// Register a new asset processor.
585593
pub fn register_processor<P: Process>(&self, processor: P) {
586-
let mut process_plans = self
594+
let mut processors = self
587595
.data
588596
.processors
589597
.write()
590598
.unwrap_or_else(PoisonError::into_inner);
591599
#[cfg(feature = "trace")]
592600
let processor = InstrumentedAssetProcessor(processor);
593-
process_plans.insert(core::any::type_name::<P>(), Arc::new(processor));
601+
processors
602+
.type_name_to_processor
603+
.insert(core::any::type_name::<P>(), Arc::new(processor));
594604
}
595605

596606
/// Set the default processor for the given `extension`. Make sure `P` is registered with [`AssetProcessor::register_processor`].
597607
pub fn set_default_processor<P: Process>(&self, extension: &str) {
598-
let mut default_processors = self
608+
let mut processors = self
599609
.data
600-
.default_processors
610+
.processors
601611
.write()
602612
.unwrap_or_else(PoisonError::into_inner);
603-
default_processors.insert(extension.into(), core::any::type_name::<P>());
613+
processors
614+
.file_extension_to_default_processor
615+
.insert(extension.into(), core::any::type_name::<P>());
604616
}
605617

606618
/// Returns the default processor for the given `extension`, if it exists.
607619
pub fn get_default_processor(&self, extension: &str) -> Option<Arc<dyn ErasedProcessor>> {
608-
let default_processors = self
620+
let processors = self
609621
.data
610-
.default_processors
611-
.read()
612-
.unwrap_or_else(PoisonError::into_inner);
613-
let key = default_processors.get(extension)?;
614-
self.data
615622
.processors
616623
.read()
617-
.unwrap_or_else(PoisonError::into_inner)
618-
.get(key)
619-
.cloned()
624+
.unwrap_or_else(PoisonError::into_inner);
625+
let key = processors
626+
.file_extension_to_default_processor
627+
.get(extension)?;
628+
processors.type_name_to_processor.get(key).cloned()
620629
}
621630

622631
/// Returns the processor with the given `processor_type_name`, if it exists.
@@ -626,7 +635,10 @@ impl AssetProcessor {
626635
.processors
627636
.read()
628637
.unwrap_or_else(PoisonError::into_inner);
629-
processors.get(processor_type_name).cloned()
638+
processors
639+
.type_name_to_processor
640+
.get(processor_type_name)
641+
.cloned()
630642
}
631643

632644
/// Populates the initial view of each asset by scanning the unprocessed and processed asset folders.
@@ -1101,7 +1113,6 @@ impl AssetProcessorData {
11011113
log: Default::default(),
11021114
processors: Default::default(),
11031115
asset_infos: Default::default(),
1104-
default_processors: Default::default(),
11051116
}
11061117
}
11071118

0 commit comments

Comments
 (0)