in cachelib/allocator/MMLru-inl.h [159:198]
void MMLru::Container<T, HookPtr>::updateLruInsertionPoint() noexcept {
if (config_.lruInsertionPointSpec == 0) {
return;
}
// If insertionPoint_ is nullptr initialize it to tail first
if (insertionPoint_ == nullptr) {
insertionPoint_ = lru_.getTail();
tailSize_ = 0;
if (insertionPoint_ != nullptr) {
markTail(*insertionPoint_);
tailSize_++;
}
}
if (lru_.size() <= 1) {
// we are done;
return;
}
XDCHECK_NE(reinterpret_cast<uintptr_t>(nullptr),
reinterpret_cast<uintptr_t>(insertionPoint_));
const auto expectedSize = lru_.size() >> config_.lruInsertionPointSpec;
auto curr = insertionPoint_;
while (tailSize_ < expectedSize && curr != lru_.getHead()) {
curr = lru_.getPrev(*curr);
markTail(*curr);
tailSize_++;
}
while (tailSize_ > expectedSize && curr != lru_.getTail()) {
unmarkTail(*curr);
tailSize_--;
curr = lru_.getNext(*curr);
}
insertionPoint_ = curr;
}