From 339100e4dbdb6f23a469397294dd1541b260eba7 Mon Sep 17 00:00:00 2001 From: James Liu Date: Mon, 26 Feb 2024 08:05:50 -0800 Subject: [PATCH] Remove the UpdateAssets and AssetEvents schedules (#11986) # Objective Fix #11845. ## Solution Remove the `UpdateAssets` and `AssetEvents` schedules. Moved the `UpdateAssets` systems to `PreUpdate`, and `AssetEvents` systems into `First`. The former is meant to run before any of the event flushes. ## Future Work It'd be ideal if we could manually flush the events for assets to avoid needing two, sort of redundant, systems. This should at least let them potentially run in parallel with all of the systems in the schedules they were moved to. --- ## Changelog Removed: `UpdateAssets` schedule from the main schedule. All systems have been moved to `PreUpdate`. Removed: `AssetEvents` schedule from the main schedule. All systems have been move to `First` with the same system sets. ## Migration Guide TODO --- crates/bevy_asset/src/lib.rs | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index f18c03397fd72c..ef6b35e993df96 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -46,10 +46,10 @@ use crate::{ io::{embedded::EmbeddedAssetRegistry, AssetSourceBuilder, AssetSourceBuilders, AssetSourceId}, processor::{AssetProcessor, Process}, }; -use bevy_app::{App, First, MainScheduleOrder, Plugin, PostUpdate}; +use bevy_app::{App, First, Plugin, PreUpdate}; use bevy_ecs::{ reflect::AppTypeRegistry, - schedule::{IntoSystemConfigs, IntoSystemSetConfigs, ScheduleLabel, SystemSet}, + schedule::{IntoSystemConfigs, IntoSystemSetConfigs, SystemSet}, system::Resource, world::FromWorld, }; @@ -146,7 +146,6 @@ impl AssetPlugin { impl Plugin for AssetPlugin { fn build(&self, app: &mut App) { - app.init_schedule(UpdateAssets).init_schedule(AssetEvents); let embedded = EmbeddedAssetRegistry::default(); { let mut sources = app @@ -218,16 +217,9 @@ impl Plugin for AssetPlugin { .init_asset::() .init_asset::<()>() .add_event::() - .configure_sets( - UpdateAssets, - TrackAssets.after(handle_internal_asset_events), - ) - .add_systems(UpdateAssets, handle_internal_asset_events) + .configure_sets(PreUpdate, TrackAssets.after(handle_internal_asset_events)) + .add_systems(PreUpdate, handle_internal_asset_events) .register_type::(); - - let mut order = app.world.resource_mut::(); - order.insert_after(First, UpdateAssets); - order.insert_after(PostUpdate, AssetEvents); } } @@ -387,10 +379,13 @@ impl AssetApp for App { .register_type::>() .register_type::>() .add_systems( - AssetEvents, - Assets::::asset_events.run_if(Assets::::asset_events_condition), + First, + Assets::::asset_events + .before(bevy_ecs::event::event_update_system::>) + .run_if(Assets::::asset_events_condition) + .in_set(AssetEvents), ) - .add_systems(UpdateAssets, Assets::::track_assets.in_set(TrackAssets)) + .add_systems(PreUpdate, Assets::::track_assets.in_set(TrackAssets)) } fn register_asset_reflect(&mut self) -> &mut Self @@ -422,14 +417,10 @@ impl AssetApp for App { #[derive(SystemSet, Hash, Debug, PartialEq, Eq, Clone)] pub struct TrackAssets; -/// Schedule where [`Assets`] resources are updated. -#[derive(Debug, Hash, PartialEq, Eq, Clone, ScheduleLabel)] -pub struct UpdateAssets; - -/// Schedule where events accumulated in [`Assets`] are applied to the [`AssetEvent`] [`Events`] resource. +/// A system set where events accumulated in [`Assets`] are applied to the [`AssetEvent`] [`Events`] resource. /// /// [`Events`]: bevy_ecs::event::Events -#[derive(Debug, Hash, PartialEq, Eq, Clone, ScheduleLabel)] +#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] pub struct AssetEvents; #[cfg(test)]