diff options
author | David Schulz <david.schulz@qt.io> | 2020-01-29 11:17:47 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2020-01-31 11:45:02 +0000 |
commit | b9f4719571728a31404aed5da0f94ebf2ebcdf84 (patch) | |
tree | ee31ac4d34b713f5af29e91973be8e14de73f3b6 /src/plugins/languageclient/documentsymbolcache.cpp | |
parent | 820fa993a6fdb349a57bb5ab4656b107c941f15d (diff) |
LanguageClient: compress requests from the symbol cache
Change-Id: I58c6863fae6e275073c377558eaba18f7f32b4f2
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient/documentsymbolcache.cpp')
-rw-r--r-- | src/plugins/languageclient/documentsymbolcache.cpp | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/src/plugins/languageclient/documentsymbolcache.cpp b/src/plugins/languageclient/documentsymbolcache.cpp index 119cfad992f..21494a66936 100644 --- a/src/plugins/languageclient/documentsymbolcache.cpp +++ b/src/plugins/languageclient/documentsymbolcache.cpp @@ -50,24 +50,34 @@ DocumentSymbolCache::DocumentSymbolCache(Client *client) &Core::EditorManager::documentOpened, this, connectDocument); + m_compressionTimer.setSingleShot(true); + connect(&m_compressionTimer, &QTimer::timeout, this, &DocumentSymbolCache::requestSymbolsImpl); } void DocumentSymbolCache::requestSymbols(const DocumentUri &uri) { - auto entry = m_cache.find(uri); - if (entry != m_cache.end()) { - emit gotSymbols(uri, entry.value()); - return; - } + m_compressedUris.insert(uri); + m_compressionTimer.start(200); +} + +void DocumentSymbolCache::requestSymbolsImpl() +{ + for (const DocumentUri &uri : qAsConst(m_compressedUris)) { + auto entry = m_cache.find(uri); + if (entry != m_cache.end()) { + emit gotSymbols(uri, entry.value()); + return; + } - const DocumentSymbolParams params((TextDocumentIdentifier(uri))); - DocumentSymbolsRequest request(params); - request.setResponseCallback([uri, self = QPointer<DocumentSymbolCache>(this)]( - const DocumentSymbolsRequest::Response &response) { - if (self) - self->handleResponse(uri, response); - }); - m_client->sendContent(request); + const DocumentSymbolParams params((TextDocumentIdentifier(uri))); + DocumentSymbolsRequest request(params); + request.setResponseCallback([uri, self = QPointer<DocumentSymbolCache>(this)]( + const DocumentSymbolsRequest::Response &response) { + if (self) + self->handleResponse(uri, response); + }); + m_client->sendContent(request); + } } void DocumentSymbolCache::handleResponse(const DocumentUri &uri, |