(
&self,
key: &AccessibilitySnapshotCacheKey,
)
| 114 | |
| 115 | impl AccessibilitySnapshotCache { |
| 116 | fn get_compatible( |
| 117 | &self, |
| 118 | key: &AccessibilitySnapshotCacheKey, |
| 119 | ) -> Option<(AccessibilitySnapshotCacheKey, Value)> { |
| 120 | let mut cache = self |
| 121 | .inner |
| 122 | .lock() |
| 123 | .unwrap_or_else(|poisoned| poisoned.into_inner()); |
| 124 | let now = Instant::now(); |
| 125 | cache.retain(|_, cached| { |
| 126 | now.duration_since(cached.cached_at) <= ACCESSIBILITY_TREE_CACHE_TTL |
| 127 | }); |
| 128 | cache |
| 129 | .iter() |
| 130 | .filter(|(cached_key, _)| { |
| 131 | cached_key.udid == key.udid |
| 132 | && cached_key.source == key.source |
| 133 | && cached_key.include_hidden == key.include_hidden |
| 134 | && cached_key.interactive_only == key.interactive_only |
| 135 | && cached_depth_covers(cached_key.max_depth, key.max_depth) |
| 136 | }) |
| 137 | .min_by_key(|(cached_key, _)| cached_depth_rank(cached_key.max_depth)) |
| 138 | .map(|(cached_key, cached)| (cached_key.clone(), cached.snapshot.clone())) |
| 139 | } |
| 140 | |
| 141 | #[cfg(test)] |
| 142 | fn insert(&self, key: AccessibilitySnapshotCacheKey, snapshot: &Value) { |
no test coverage detected