clang-tools 8.0.0

Public Member Functions | List of all members
clang::clangd::PreambleFileStatusCache Class Reference

Records status information for files open()ed or stat()ed during preamble build (except for the main file), so we can avoid stat()s on the underlying FS when reusing the preamble. More...

`#include <FS.h>`

## Public Member Functions
| PreambleFileStatusCache (llvm::StringRef MainFilePath)
| `MainFilePath` is the absolute path of the main source file this preamble corresponds to. More...
void | update (const llvm::vfs::FileSystem &FS, llvm::vfs::Status S)
llvm::Optional< llvm::vfs::Status > | lookup (llvm::StringRef Path) const
| `Path` is a path stored in preamble. More...
IntrusiveRefCntPtr< llvm::vfs::FileSystem > | getProducingFS (IntrusiveRefCntPtr< llvm::vfs::FileSystem > FS)
| Returns a VFS that collects file status. More...
IntrusiveRefCntPtr< llvm::vfs::FileSystem > | getConsumingFS (IntrusiveRefCntPtr< llvm::vfs::FileSystem > FS) const
| Returns a VFS that uses the cache collected. More...

## Detailed Description

Records status information for files open()ed or stat()ed during preamble build (except for the main file), so we can avoid stat()s on the underlying FS when reusing the preamble.

For example, code completion can re-stat files when getting FileID for source locations stored in preamble (e.g. checking whether a location is in the main file).

The cache is keyed by absolute path of file name in cached status, as this is what preamble stores.

The cache is not thread-safe when updates happen, so the use pattern should be:

- One FS writes to the cache from one thread (or several but strictly sequenced), e.g. when building preamble.
- Sequence point (no writes after this point, no reads before).
- Several FSs can read from the cache, e.g. code completions.

Note that the cache is only valid when reusing preamble.

Definition at line 37 of file FS.h.

## Constructor & Destructor Documentation

## ◆ PreambleFileStatusCache()

clang::clangd::PreambleFileStatusCache::PreambleFileStatusCache | ( | llvm::StringRef | MainFilePath | ) |

`MainFilePath` is the absolute path of the main source file this preamble corresponds to.

The stat for the main file will not be cached.

Definition at line 18 of file FS.cpp.

## Member Function Documentation

## ◆ getConsumingFS()

llvm::IntrusiveRefCntPtr< llvm::vfs::FileSystem > clang::clangd::PreambleFileStatusCache::getConsumingFS | ( | IntrusiveRefCntPtr< llvm::vfs::FileSystem > | FS | ) | const

Returns a VFS that uses the cache collected.

Note that the returned VFS should not outlive the cache.

Definition at line 84 of file FS.cpp.

References lookup().

## ◆ getProducingFS()

llvm::IntrusiveRefCntPtr< llvm::vfs::FileSystem > clang::clangd::PreambleFileStatusCache::getProducingFS | ( | IntrusiveRefCntPtr< llvm::vfs::FileSystem > | FS | ) |

Returns a VFS that collects file status.

Only cache stats for files that exist because 1) we only care about existing files when reusing preamble, unlike building preamble. 2) we use the file name in the Status as the cache key.

Note that the returned VFS should not outlive the cache.

Definition at line 44 of file FS.cpp.

References clang::clangd::File, and update().

## ◆ lookup()

llvm::Optional< llvm::vfs::Status > clang::clangd::PreambleFileStatusCache::lookup | ( | llvm::StringRef | Path | ) | const

`Path` is a path stored in preamble.

Definition at line 36 of file FS.cpp.

References clang::clangd::None.

Referenced by getConsumingFS().

## ◆ update()

void clang::clangd::PreambleFileStatusCache::update | ( | const llvm::vfs::FileSystem & | FS,
|  | llvm::vfs::Status | S
| ) |  |

Definition at line 23 of file FS.cpp.

Referenced by getProducingFS().

The documentation for this class was generated from the following files:

- FS.h
- FS.cpp