in crates/ratchet-core/src/gpu/pools/dynamic_resource_pool.rs [330:364]
fn allocate_resources(
descs: &[u32],
pool: &mut DynamicResourcePool<ConcreteHandle, ConcreteResourceDesc, ConcreteResource>,
expect_allocation: bool,
) {
let drop_counter_before = DROP_COUNTER.with(|c| c.get());
let byte_count_before = pool.total_resource_size_in_bytes();
for &desc in descs {
// Previous loop iteration didn't drop Resources despite dropping a handle.
assert_eq!(drop_counter_before, DROP_COUNTER.with(|c| c.get()));
let new_resource_created = Cell::new(false);
let resource = pool.get_or_create(&ConcreteResourceDesc(desc), |_| {
new_resource_created.set(true);
ConcreteResource
});
assert_eq!(new_resource_created.get(), expect_allocation);
// Resource pool keeps the handle alive, but otherwise we're the only owners.
assert_eq!(Arc::strong_count(&resource), 2);
}
if expect_allocation {
assert_eq!(
byte_count_before
+ descs
.iter()
.map(|d| ConcreteResourceDesc(*d).resource_size_in_bytes())
.sum::<u64>(),
pool.total_resource_size_in_bytes()
);
} else {
assert_eq!(byte_count_before, pool.total_resource_size_in_bytes());
}
}