diff --git a/components/style/cache.rs b/components/style/cache.rs index 69be4a62514..313f3ea193c 100644 --- a/components/style/cache.rs +++ b/components/style/cache.rs @@ -11,14 +11,14 @@ use std::slice::{Iter, IterMut}; /// A LRU cache used to store a set of at most `n` elements at the same time. /// /// Currently used for the style sharing candidate cache. -pub struct LRUCache { - entries: Vec<(K, V)>, +pub struct LRUCache { + entries: Vec, cache_size: usize, } -impl LRUCache { +impl LRUCache { /// Create a new LRU cache with `size` elements at most. - pub fn new(size: usize) -> LRUCache { + pub fn new(size: usize) -> Self { LRUCache { entries: vec![], cache_size: size, @@ -27,54 +27,30 @@ impl LRUCache { #[inline] /// Touch a given position, and put it in the last item on the list. - pub fn touch(&mut self, pos: usize) -> &V { + pub fn touch(&mut self, pos: usize) { let last_index = self.entries.len() - 1; if pos != last_index { let entry = self.entries.remove(pos); self.entries.push(entry); } - &self.entries[last_index].1 } /// Iterate over the contents of this cache. - pub fn iter(&self) -> Iter<(K, V)> { + pub fn iter(&self) -> Iter { self.entries.iter() } /// Iterate mutably over the contents of this cache. - pub fn iter_mut(&mut self) -> IterMut<(K, V)> { + pub fn iter_mut(&mut self) -> IterMut { self.entries.iter_mut() } - /// Insert a given key and value in the cache. - pub fn insert(&mut self, key: K, val: V) { + /// Insert a given key in the cache. + pub fn insert(&mut self, key: K) { if self.entries.len() == self.cache_size { self.entries.remove(0); } - self.entries.push((key, val)); - } - - /// Try to find a key in the cache. - pub fn find(&mut self, key: &K) -> Option { - match self.entries.iter().position(|&(ref k, _)| key == k) { - Some(pos) => Some(self.touch(pos).clone()), - None => None, - } - } - - /// Try to find a given key, or create a given item with that key executing - /// `blk`. - pub fn find_or_create(&mut self, key: K, mut blk: F) -> V - where F: FnMut() -> V, - { - match self.entries.iter().position(|&(ref k, _)| *k == key) { - Some(pos) => self.touch(pos).clone(), - None => { - let val = blk(); - self.insert(key, val.clone()); - val - } - } + self.entries.push(key); } /// Evict all elements from the cache. diff --git a/components/style/matching.rs b/components/style/matching.rs index 8f9ec017dbd..f47276d83a6 100644 --- a/components/style/matching.rs +++ b/components/style/matching.rs @@ -110,7 +110,7 @@ impl PartialEq> for StyleSharingCandidate< /// Note that this cache is flushed every time we steal work from the queue, so /// storing nodes here temporarily is safe. pub struct StyleSharingCandidateCache { - cache: LRUCache, ()>, + cache: LRUCache>, } /// A cache miss result. @@ -366,7 +366,7 @@ impl StyleSharingCandidateCache { } } - fn iter_mut(&mut self) -> IterMut<(StyleSharingCandidate, ())> { + fn iter_mut(&mut self) -> IterMut> { self.cache.iter_mut() } @@ -410,7 +410,7 @@ impl StyleSharingCandidateCache { element: unsafe { SendElement::new(*element) }, common_style_affecting_attributes: None, class_attributes: None, - }, ()); + }); } /// Touch a given index in the style sharing candidate cache. @@ -881,8 +881,10 @@ pub trait MatchMethods : TElement { } let mut should_clear_cache = false; - for (i, &mut (ref mut candidate, ())) in style_sharing_candidate_cache.iter_mut().enumerate() { - let sharing_result = self.share_style_with_candidate_if_possible(shared_context, candidate); + for (i, candidate) in style_sharing_candidate_cache.iter_mut().enumerate() { + let sharing_result = + self.share_style_with_candidate_if_possible(shared_context, + candidate); match sharing_result { Ok(shared_style) => { // Yay, cache hit. Share the style. diff --git a/tests/unit/style/cache.rs b/tests/unit/style/cache.rs deleted file mode 100644 index 7456a87b55c..00000000000 --- a/tests/unit/style/cache.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -use std::cell::Cell; -use style::cache::LRUCache; - -#[test] -fn test_lru_cache() { - let one = Cell::new("one"); - let two = Cell::new("two"); - let three = Cell::new("three"); - let four = Cell::new("four"); - - // Test normal insertion. - let mut cache: LRUCache> = LRUCache::new(2); // (_, _) (cache is empty) - cache.insert(1, one); // (1, _) - cache.insert(2, two); // (1, 2) - cache.insert(3, three); // (2, 3) - - assert!(cache.find(&1).is_none()); // (2, 3) (no change) - assert!(cache.find(&3).is_some()); // (2, 3) - assert!(cache.find(&2).is_some()); // (3, 2) - - // Test that LRU works (this insertion should replace 3, not 2). - cache.insert(4, four); // (2, 4) - - assert!(cache.find(&1).is_none()); // (2, 4) (no change) - assert!(cache.find(&2).is_some()); // (4, 2) - assert!(cache.find(&3).is_none()); // (4, 2) (no change) - assert!(cache.find(&4).is_some()); // (2, 4) (no change) - - // Test find_or_create. - cache.find_or_create(1, || { Cell::new("one") }); // (4, 1) - - assert!(cache.find(&1).is_some()); // (4, 1) (no change) - assert!(cache.find(&2).is_none()); // (4, 1) (no change) - assert!(cache.find(&3).is_none()); // (4, 1) (no change) - assert!(cache.find(&4).is_some()); // (1, 4) -} diff --git a/tests/unit/style/lib.rs b/tests/unit/style/lib.rs index bb88a538a73..9d7cdcae651 100644 --- a/tests/unit/style/lib.rs +++ b/tests/unit/style/lib.rs @@ -23,7 +23,6 @@ extern crate test; mod animated_properties; mod attr; -mod cache; mod keyframes; mod logical_geometry; mod media_queries;