clang-tools  11.0.0git
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
 
struct  FileStats
 
struct  Options
 

Public Types

enum  ASTActionInvalidation { NoInvalidation, InvalidateOnUpdate }
 Defines how a runWithAST action is implicitly cancelled by other actions. More...
 
enum  PreambleConsistency { Stale, StaleOrAbsent }
 Controls whether preamble reads wait for the preamble to be up-to-date. More...
 

Public Member Functions

 TUScheduler (const GlobalCompilationDatabase &CDB, const Options &Opts, std::unique_ptr< ParsingCallbacks > ASTCallbacks=nullptr)
 
 ~TUScheduler ()
 
llvm::StringMap< FileStatsfileStats () const
 Returns resources used for each of the currently open files. More...
 
std::vector< PathgetFilesWithCachedAST () 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::StringMap< std::string > getAllFileContents () const
 Returns a snapshot of all file buffer contents, per last update(). More...
 
void run (llvm::StringRef Name, llvm::StringRef Path, llvm::unique_function< void()> Action)
 Schedule an async task with no dependencies. More...
 
void runWithAST (llvm::StringRef Name, PathRef File, Callback< InputsAndAST > Action, ASTActionInvalidation=NoInvalidation)
 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).

Definition at line 176 of file TUScheduler.h.

Member Enumeration Documentation

◆ ASTActionInvalidation

Defines how a runWithAST action is implicitly cancelled by other actions.

Enumerator
NoInvalidation 

The request will run unless explicitly cancelled.

InvalidateOnUpdate 

The request will be implicitly cancelled by a subsequent update().

(Only if the request was not yet cancelled). Useful for requests that are generated by clients, without any explicit user action. These can otherwise e.g. force every version to be built.

Definition at line 246 of file TUScheduler.h.

◆ PreambleConsistency

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

Enumerator
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 269 of file TUScheduler.h.

Constructor & Destructor Documentation

◆ TUScheduler()

clang::clangd::TUScheduler::TUScheduler ( const GlobalCompilationDatabase CDB,
const Options Opts,
std::unique_ptr< ParsingCallbacks ASTCallbacks = nullptr 
)

◆ ~TUScheduler()

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

Definition at line 1247 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 1258 of file TUScheduler.cpp.

References clang::clangd::File.

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

◆ fileStats()

llvm::StringMap< TUScheduler::FileStats > clang::clangd::TUScheduler::fileStats ( ) const

Returns resources used for each of the currently open files.

Results are inherently racy as they measure activity of other threads.

Definition at line 1383 of file TUScheduler.cpp.

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

◆ getAllFileContents()

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

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

Definition at line 1294 of file TUScheduler.cpp.

References Results.

◆ getFileBeingProcessedInContext()

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

◆ 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 1391 of file TUScheduler.cpp.

◆ 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 1287 of file TUScheduler.cpp.

References clang::clangd::elog().

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

◆ run()

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

Schedule an async task with no dependencies.

Path may be empty (it is used only to set the Context).

Definition at line 1301 of file TUScheduler.cpp.

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

◆ runWithAST()

void clang::clangd::TUScheduler::runWithAST ( llvm::StringRef  Name,
PathRef  File,
Callback< InputsAndAST Action,
ASTActionInvalidation  = NoInvalidation 
)

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, or the invalidation policy is triggered, the callback will receive a CancelledError.

Definition at line 1317 of file TUScheduler.cpp.

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

Referenced by clang::clangd::ClangdServer::documentLinks(), clang::clangd::ClangdServer::documentSymbols(), clang::clangd::ClangdServer::findDocumentHighlights(), clang::clangd::ClangdServer::locateSymbolAt(), clang::clangd::ClangdServer::semanticHighlights(), 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 1331 of file TUScheduler.cpp.

References Action, clang::clangd::InputsAndPreamble::Contents, clang::clangd::InvalidParams, Preamble, SPAN_ATTACH, and Tracer.

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 1268 of file TUScheduler.cpp.

References clang::clangd::File.


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