@@ -869,10 +869,12 @@ impl App {
&mut self,
callback: impl FnOnce(&mut App) -> R,
) -> (R, FxHashSet<EntityId>) {
- let accessed_entities_start = self.entities.accessed_entities.borrow().clone();
+ let accessed_entities_start = self.entities.accessed_entities.get_mut().clone();
let result = callback(self);
- let accessed_entities_end = self.entities.accessed_entities.borrow().clone();
- let entities_accessed_in_callback = accessed_entities_end
+ let entities_accessed_in_callback = self
+ .entities
+ .accessed_entities
+ .get_mut()
.difference(&accessed_entities_start)
.copied()
.collect::<FxHashSet<EntityId>>();
@@ -11,7 +11,6 @@ use std::{
fmt::{self, Display},
hash::{Hash, Hasher},
marker::PhantomData,
- mem,
num::NonZeroU64,
sync::{
Arc, Weak,
@@ -95,7 +94,7 @@ impl EntityMap {
where
T: 'static,
{
- let mut accessed_entities = self.accessed_entities.borrow_mut();
+ let mut accessed_entities = self.accessed_entities.get_mut();
accessed_entities.insert(slot.entity_id);
let handle = slot.0;
@@ -107,7 +106,7 @@ impl EntityMap {
#[track_caller]
pub fn lease<T>(&mut self, pointer: &Entity<T>) -> Lease<T> {
self.assert_valid_context(pointer);
- let mut accessed_entities = self.accessed_entities.borrow_mut();
+ let mut accessed_entities = self.accessed_entities.get_mut();
accessed_entities.insert(pointer.entity_id);
let entity = Some(
@@ -147,21 +146,20 @@ impl EntityMap {
pub fn extend_accessed(&mut self, entities: &FxHashSet<EntityId>) {
self.accessed_entities
- .borrow_mut()
+ .get_mut()
.extend(entities.iter().copied());
}
pub fn clear_accessed(&mut self) {
- self.accessed_entities.borrow_mut().clear();
+ self.accessed_entities.get_mut().clear();
}
pub fn take_dropped(&mut self) -> Vec<(EntityId, Box<dyn Any>)> {
- let mut ref_counts = self.ref_counts.write();
- let dropped_entity_ids = mem::take(&mut ref_counts.dropped_entity_ids);
- let mut accessed_entities = self.accessed_entities.borrow_mut();
+ let mut ref_counts = &mut *self.ref_counts.write();
+ let dropped_entity_ids = ref_counts.dropped_entity_ids.drain(..);
+ let mut accessed_entities = self.accessed_entities.get_mut();
dropped_entity_ids
- .into_iter()
.filter_map(|entity_id| {
let count = ref_counts.counts.remove(entity_id).unwrap();
debug_assert_eq!(
@@ -2236,9 +2236,8 @@ impl Window {
}
fn record_entities_accessed(&mut self, cx: &mut App) {
- let mut entities_ref = cx.entities.accessed_entities.borrow_mut();
+ let mut entities_ref = cx.entities.accessed_entities.get_mut();
let mut entities = mem::take(entities_ref.deref_mut());
- drop(entities_ref);
let handle = self.handle;
cx.record_entities_accessed(
handle,
@@ -2246,7 +2245,7 @@ impl Window {
self.invalidator.clone(),
&entities,
);
- let mut entities_ref = cx.entities.accessed_entities.borrow_mut();
+ let mut entities_ref = cx.entities.accessed_entities.get_mut();
mem::swap(&mut entities, entities_ref.deref_mut());
}