From 27d809fd2377f599b9e832c0bfbcdbbd35488fc6 Mon Sep 17 00:00:00 2001 From: Nathan Ward Date: Mon, 7 Jun 2021 18:32:57 +0000 Subject: [PATCH] [assets] remove unnecessary temporary strong handles (#2304) # Objective - When creating an asset, the `update_asset_storage` function was unnecessarily creating an extraneous `Handle` to the created asset via calling `set`. This has some overhead as the `RefChange::Increment/Decrement` event was being sent. - A similar exteraneous handle is also created in `load_async` when loading dependencies. ## Solution - Have the implementation use `Assets::set_untracked` and `AssetServer::load_untracked` so no intermediate handle is created. --- crates/bevy_asset/src/asset_server.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/bevy_asset/src/asset_server.rs b/crates/bevy_asset/src/asset_server.rs index c553be3e4a..97c7dfa864 100644 --- a/crates/bevy_asset/src/asset_server.rs +++ b/crates/bevy_asset/src/asset_server.rs @@ -328,8 +328,7 @@ impl AssetServer { let type_uuid = loaded_asset.value.as_ref().unwrap().type_uuid(); source_info.asset_types.insert(label_id, type_uuid); for dependency in loaded_asset.dependencies.iter() { - // another handle already exists created from the asset path - let _ = self.load_untyped(dependency.clone()); + self.load_untracked(dependency.clone(), false); } } @@ -493,7 +492,7 @@ impl AssetServer { } } - let _ = assets.set(result.id, *result.asset); + assets.set_untracked(result.id, *result.asset); } Ok(AssetLifecycleEvent::Free(handle_id)) => { if let HandleId::AssetPathId(id) = handle_id {