clang-tools 10.0.0

Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
clang::clangd::TUScheduler Class Reference

Handles running tasks for ClangdServer and managing the resources (e.g., preambles and ASTs) for opened files. More...

`#include <TUScheduler.h>`

## Classes
class | ASTCache
| An LRU cache of idle ASTs. More...
struct | FileData

## Public Types
enum | PreambleConsistency { Consistent, Stale, StaleOrAbsent }
| Controls whether preamble reads wait for the preamble to be up-to-date. More...

## Public Member Functions
| TUScheduler (const GlobalCompilationDatabase &CDB, unsigned AsyncThreadsCount, bool StorePreamblesInMemory, std::unique_ptr< ParsingCallbacks > ASTCallbacks, std::chrono::steady_clock::duration UpdateDebounce, ASTRetentionPolicy RetentionPolicy)
| ~TUScheduler ()
std::vector< std::pair< Path, std::size_t > > | getUsedBytesPerFile () const
| Returns estimated memory usage for each of the currently open files. More...
std::vector< Path > | getFilesWithCachedAST () const
| Returns a list of files with ASTs currently stored in memory. More...
bool | update (PathRef File, ParseInputs Inputs, WantDiagnostics WD)
| Schedule an update for `File`. More...
void | remove (PathRef File)
| Remove `File` from the list of tracked files and schedule removal of its resources. More...
llvm::StringRef | getContents (PathRef File) const
| Returns the current contents of the buffer for File, per last update(). More...
llvm::StringMap< std::string > | getAllFileContents () const
| Returns a snapshot of all file buffer contents, per last update(). More...
void | run (llvm::StringRef Name, llvm::unique_function< void()> Action)
| Schedule an async task with no dependencies. More...
void | runWithAST (llvm::StringRef Name, PathRef File, Callback< InputsAndAST > Action)
| Schedule an async read of the AST. More...
void | runWithPreamble (llvm::StringRef Name, PathRef File, PreambleConsistency Consistency, Callback< InputsAndPreamble > Action)
| Schedule an async read of the preamble. More...
bool | blockUntilIdle (Deadline D) const
| Wait until there are no scheduled or running tasks. More...

## Static Public Member Functions
static llvm::Optional< llvm::StringRef > | getFileBeingProcessedInContext ()

## Detailed Description

Handles running tasks for ClangdServer and managing the resources (e.g., preambles and ASTs) for opened files.

TUScheduler is not thread-safe, only one thread should be providing updates and scheduling tasks. Callbacks are run on a threadpool and it's appropriate to do slow work in them. Each task has a name, used for tracing (should be UpperCamelCase). FIXME(sammccall): pull out a scheduler options struct.

Definition at line 147 of file TUScheduler.h.

## Member Enumeration Documentation

## ◆ PreambleConsistency

enum clang::clangd::TUScheduler::PreambleConsistency

Controls whether preamble reads wait for the preamble to be up-to-date.

Enumerator
Consistent | The preamble is generated from the current version of the file. If the content was recently updated, we will wait until we have a preamble that reflects that update. This is the slowest option, and may be delayed by other tasks.
Stale | The preamble may be generated from an older version of the file. Reading from locations in the preamble may cause files to be re-read. This gives callers two options: validate that the preamble is still valid, and only use it if so accept that the preamble contents may be outdated, and try to avoid reading source code from headers. This is the fastest option, usually a preamble is available immediately.
StaleOrAbsent | Besides accepting stale preamble, this also allow preamble to be absent (not ready or failed to build).

Definition at line 201 of file TUScheduler.h.

## Constructor & Destructor Documentation

## ◆ TUScheduler()

clang::clangd::TUScheduler::TUScheduler | ( | const GlobalCompilationDatabase & | CDB,
|  | unsigned | AsyncThreadsCount,
|  | bool | StorePreamblesInMemory,
|  | std::unique_ptr< ParsingCallbacks > | ASTCallbacks,
|  | std::chrono::steady_clock::duration | UpdateDebounce,
|  | ASTRetentionPolicy | RetentionPolicy
| ) |  |

Definition at line 849 of file TUScheduler.cpp.

## ◆ ~TUScheduler()

clang::clangd::TUScheduler::~TUScheduler | ( |  | ) |

Definition at line 867 of file TUScheduler.cpp.

## Member Function Documentation

## ◆ blockUntilIdle()

bool clang::clangd::TUScheduler::blockUntilIdle | ( | Deadline | D | ) | const

Wait until there are no scheduled or running tasks.

Mostly useful for synchronizing tests.

Definition at line 878 of file TUScheduler.cpp.

References clang::clangd::File.

Referenced by clang::clangd::ClangdServer::blockUntilIdleForTest().

## ◆ getAllFileContents()

llvm::StringMap< std::string > clang::clangd::TUScheduler::getAllFileContents | ( |  | ) | const

Returns a snapshot of all file buffer contents, per last update().

Definition at line 923 of file TUScheduler.cpp.

References Results.

Referenced by clang::clangd::ClangdServer::rename().

## ◆ getContents()

llvm::StringRef clang::clangd::TUScheduler::getContents | ( | PathRef | File | ) | const

Returns the current contents of the buffer for File, per last update().

The returned StringRef may be invalidated by any write to TUScheduler.

Definition at line 914 of file TUScheduler.cpp.

References clang::clangd::elog().

Referenced by clang::clangd::ClangdServer::getDocument().

## ◆ getFileBeingProcessedInContext()

llvm::Optional< llvm::StringRef > clang::clangd::TUScheduler::getFileBeingProcessedInContext | ( |  | ) |
| static

Definition at line 77 of file TUScheduler.cpp.

References clang::clangd::Context::current(), clang::clangd::File, and clang::clangd::None.

## ◆ getFilesWithCachedAST()

std::vector< Path > clang::clangd::TUScheduler::getFilesWithCachedAST | ( |  | ) | const

Returns a list of files with ASTs currently stored in memory.

This method is not very reliable and is only used for test. E.g., the results will not contain files that currently run something over their AST.

Definition at line 1029 of file TUScheduler.cpp.

## ◆ getUsedBytesPerFile()

std::vector< std::pair< Path, std::size_t > > clang::clangd::TUScheduler::getUsedBytesPerFile | ( |  | ) | const

Returns estimated memory usage for each of the currently open files.

The order of results is unspecified.

Definition at line 1020 of file TUScheduler.cpp.

Referenced by clang::clangd::ClangdServer::getUsedBytesPerFile().

## ◆ remove()

void clang::clangd::TUScheduler::remove | ( | PathRef | File | ) |

Remove `File` from the list of tracked files and schedule removal of its resources.

Pending diagnostics for closed files may not be delivered, even if requested with WantDiags::Auto or WantDiags::Yes.

Definition at line 907 of file TUScheduler.cpp.

References clang::clangd::elog().

Referenced by clang::clangd::ClangdServer::removeDocument().

## ◆ run()

void clang::clangd::TUScheduler::run | ( | llvm::StringRef | Name,
|  | llvm::unique_function< void()> | Action
| ) |  |

Schedule an async task with no dependencies.

Definition at line 930 of file TUScheduler.cpp.

References Action, Ctx, and clang::clangd::Context::current().

## ◆ runWithAST()

void clang::clangd::TUScheduler::runWithAST | ( | llvm::StringRef | Name,
|  | PathRef | File,
|  | Callback< InputsAndAST > | Action
| ) |  |

Schedule an async read of the AST.

`Action` will be called when AST is ready. The AST passed to `Action` refers to the version of `File` tracked at the time of the call, even if new updates are received before `Action` is executed. If an error occurs during processing, it is forwarded to the `Action` callback. If the context is cancelled before the AST is ready, the callback will receive a CancelledError.

Definition at line 941 of file TUScheduler.cpp.

References Action, and clang::clangd::InvalidParams.

Referenced by clang::clangd::ClangdServer::documentLinks(), clang::clangd::ClangdServer::documentSymbols(), clang::clangd::ClangdServer::enumerateTweaks(), clang::clangd::ClangdServer::findDocumentHighlights(), clang::clangd::ClangdServer::findReferences(), clang::clangd::ClangdServer::locateSymbolAt(), clang::clangd::ClangdServer::semanticRanges(), clang::clangd::ClangdServer::switchSourceHeader(), clang::clangd::ClangdServer::symbolInfo(), and clang::clangd::ClangdServer::typeHierarchy().

## ◆ runWithPreamble()

void clang::clangd::TUScheduler::runWithPreamble | ( | llvm::StringRef | Name,
|  | PathRef | File,
|  | PreambleConsistency | Consistency,
|  | Callback< InputsAndPreamble > | Action
| ) |  |

Schedule an async read of the preamble.

If there's no up-to-date preamble, we follow the PreambleConsistency policy. If an error occurs, it is forwarded to the `Action` callback. Context cancellation is ignored and should be handled by the Action. (In practice, the Action is almost always executed immediately).

Definition at line 954 of file TUScheduler.cpp.

References Action, and clang::clangd::InvalidParams.

Referenced by clang::clangd::ClangdServer::signatureHelp().

## ◆ update()

bool clang::clangd::TUScheduler::update | ( | PathRef | File,
|  | ParseInputs | Inputs,
|  | WantDiagnostics | WD
| ) |  |

Schedule an update for `File`.

The compile command in `Inputs` is ignored; worker queries CDB to get the actual compile command. If diagnostics are requested (Yes), and the context is cancelled before they are prepared, they may be skipped if eventual-consistency permits it (i.e. WantDiagnostics is downgraded to Auto). Returns true if the file was not previously tracked.

Definition at line 888 of file TUScheduler.cpp.

References clang::clangd::File.

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

- TUScheduler.h
- TUScheduler.cpp