//===--- BackgroundIndexRebuild.h - when to rebuild the bg index--*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains an implementation detail of the background indexer // (Background.h), which is exposed for testing. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_BACKGROUNDREBUILD_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_BACKGROUNDREBUILD_H #include "index/FileIndex.h" #include "index/Index.h" #include <cstddef> namespace clang { namespace clangd { // The BackgroundIndexRebuilder builds the serving data structures periodically // in response to events in the background indexer. The goal is to ensure the // served data stays fairly fresh, without wasting lots of CPU rebuilding it // often. // // The index is always built after a set of shards are loaded from disk. // This happens when clangd discovers a compilation database that we've // previously built an index for. It's a fairly fast process that yields lots // of data, so we wait to get all of it. // // The index is built after indexing a few translation units, if it wasn't built // already. This ensures quick startup if there's no existing index. // Waiting for a few random TUs yields coverage of the most common headers. // // The index is rebuilt every N TUs, to keep if fresh as files are indexed. // // The index is rebuilt every time the queue goes idle, if it's stale. // // All methods are threadsafe. They're called after FileSymbols is updated // etc. Without external locking, the rebuilt index may include more updates // than intended, which is fine. // // This class is exposed in the header so it can be tested. class BackgroundIndexRebuilder { … }; } // namespace clangd } // namespace clang #endif