Retain caches in iced_wgpu as long as Rc values are alive
This allows reusing a `canvas::Cache` at no cost even if it is not presented every frame.
This commit is contained in:
parent
d5bb6deb2f
commit
2dcd4f916e
2 changed files with 12 additions and 14 deletions
|
|
@ -4,9 +4,9 @@ use crate::graphics::color;
|
|||
use crate::graphics::text::cache::{self, Cache as BufferCache};
|
||||
use crate::graphics::text::{font_system, to_color, Editor, Paragraph};
|
||||
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
use rustc_hash::FxHashMap;
|
||||
use std::collections::hash_map;
|
||||
use std::rc::Rc;
|
||||
use std::rc::{self, Rc};
|
||||
use std::sync::atomic::{self, AtomicU64};
|
||||
use std::sync::Arc;
|
||||
|
||||
|
|
@ -69,12 +69,12 @@ struct Upload {
|
|||
buffer_cache: BufferCache,
|
||||
transformation: Transformation,
|
||||
version: usize,
|
||||
text: rc::Weak<[Text]>,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Storage {
|
||||
uploads: FxHashMap<Id, Upload>,
|
||||
recently_used: FxHashSet<Id>,
|
||||
}
|
||||
|
||||
impl Storage {
|
||||
|
|
@ -162,6 +162,7 @@ impl Storage {
|
|||
buffer_cache,
|
||||
transformation: new_transformation,
|
||||
version: 0,
|
||||
text: Rc::downgrade(&cache.text),
|
||||
});
|
||||
|
||||
log::info!(
|
||||
|
|
@ -171,13 +172,11 @@ impl Storage {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
let _ = self.recently_used.insert(cache.id);
|
||||
}
|
||||
|
||||
pub fn trim(&mut self) {
|
||||
self.uploads.retain(|id, _| self.recently_used.contains(id));
|
||||
self.recently_used.clear();
|
||||
self.uploads
|
||||
.retain(|_id, upload| upload.text.strong_count() > 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@ use crate::graphics::mesh::{self, Mesh};
|
|||
use crate::graphics::Antialiasing;
|
||||
use crate::Buffer;
|
||||
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
use rustc_hash::FxHashMap;
|
||||
use std::collections::hash_map;
|
||||
use std::rc::Rc;
|
||||
use std::rc::{self, Rc};
|
||||
use std::sync::atomic::{self, AtomicU64};
|
||||
|
||||
const INITIAL_INDEX_COUNT: usize = 1_000;
|
||||
|
|
@ -64,12 +64,12 @@ struct Upload {
|
|||
layer: Layer,
|
||||
transformation: Transformation,
|
||||
version: usize,
|
||||
batch: rc::Weak<[Mesh]>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct Storage {
|
||||
uploads: FxHashMap<Id, Upload>,
|
||||
recently_used: FxHashSet<Id>,
|
||||
}
|
||||
|
||||
impl Storage {
|
||||
|
|
@ -134,6 +134,7 @@ impl Storage {
|
|||
layer,
|
||||
transformation: new_transformation,
|
||||
version: 0,
|
||||
batch: Rc::downgrade(&cache.batch),
|
||||
});
|
||||
|
||||
log::info!(
|
||||
|
|
@ -143,13 +144,11 @@ impl Storage {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
let _ = self.recently_used.insert(cache.id);
|
||||
}
|
||||
|
||||
pub fn trim(&mut self) {
|
||||
self.uploads.retain(|id, _| self.recently_used.contains(id));
|
||||
self.recently_used.clear();
|
||||
self.uploads
|
||||
.retain(|_id, upload| upload.batch.strong_count() > 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue