From 7e5d7eea9c580ef4b41a765bde624af431942b96 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:41:35 +0200 Subject: Merging upstream version 1.70.0+dfsg2. Signed-off-by: Daniel Baumann --- vendor/gix/src/repository/cache.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 vendor/gix/src/repository/cache.rs (limited to 'vendor/gix/src/repository/cache.rs') diff --git a/vendor/gix/src/repository/cache.rs b/vendor/gix/src/repository/cache.rs new file mode 100644 index 000000000..7dcd844e6 --- /dev/null +++ b/vendor/gix/src/repository/cache.rs @@ -0,0 +1,30 @@ +/// Configure how caches are used to speed up various git repository operations +impl crate::Repository { + /// Sets the amount of space used at most for caching most recently accessed fully decoded objects, to `Some(bytes)`, + /// or `None` to deactivate it entirely. + /// + /// Note that it is unset by default but can be enabled once there is time for performance optimization. + /// Well-chosen cache sizes can improve performance particularly if objects are accessed multiple times in a row. + /// The cache is configured to grow gradually. + /// + /// Note that a cache on application level should be considered as well as the best object access is not doing one. + pub fn object_cache_size(&mut self, bytes: impl Into>) { + let bytes = bytes.into(); + match bytes { + Some(bytes) if bytes == 0 => self.objects.unset_object_cache(), + Some(bytes) => self + .objects + .set_object_cache(move || Box::new(crate::object::cache::MemoryCappedHashmap::new(bytes))), + None => self.objects.unset_object_cache(), + } + } + + /// Set an object cache of size `bytes` if none is set. + /// + /// Use this method to avoid overwriting any existing value while assuring better performance in case no value is set. + pub fn object_cache_size_if_unset(&mut self, bytes: usize) { + if !self.objects.has_object_cache() { + self.object_cache_size(bytes) + } + } +} -- cgit v1.2.3