From 8d73e5a9cd6ddbafb0cdcd162e50d2aef09c467e Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Wed, 1 May 2024 10:45:48 -0700 Subject: [PATCH] [core] Refactor `LifetimeTracker::triage_resources`. Check whether the resource is abandoned first, since none of the rest of the work is necessary otherwise. Rename `non_referenced_resources` to `last_resources`. This function copes with various senses in which the resource might be referenced or not. Instead, `last_resources` is the name of the `ActiveSubmission` member this may point to, which is more specific. Move the use of `last_resources` immediately after its production. --- wgpu-core/src/device/life.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/wgpu-core/src/device/life.rs b/wgpu-core/src/device/life.rs index c43087eaa6..b3659f23f0 100644 --- a/wgpu-core/src/device/life.rs +++ b/wgpu-core/src/device/life.rs @@ -493,20 +493,23 @@ impl LifetimeTracker { { let mut removed_resources = Vec::new(); resources_map.retain(|&index, resource| { + if !trackers.remove_abandoned(index) { + return true; + } + + // If this resource is used by commands in flight, save + // it in that submission's `last_resources` list. let submit_index = resource.as_info().submission_index(); - let non_referenced_resources = active + let last_resources = active .iter_mut() .find(|a| a.index == submit_index) .map(|a| &mut a.last_resources); - - let is_removed = trackers.remove_abandoned(index); - if is_removed { - removed_resources.push(resource.clone()); - if let Some(resources) = non_referenced_resources { - get_resource_map(resources).insert(index, resource.clone()); - } + if let Some(last_resources) = last_resources { + get_resource_map(last_resources).insert(index, resource.clone()); } - !is_removed + + removed_resources.push(resource.clone()); + false }); removed_resources }