Author: Sam McCall Date: 2022-09-05T18:34:41+02:00 New Revision: 05737fa209ba97b330739af3b00834c21b0547b7
URL: https://github.com/llvm/llvm-project/commit/05737fa209ba97b330739af3b00834c21b0547b7 DIFF: https://github.com/llvm/llvm-project/commit/05737fa209ba97b330739af3b00834c21b0547b7.diff LOG: [clangd] Trace preamble throttle time Added: Modified: clang-tools-extra/clangd/TUScheduler.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/TUScheduler.cpp b/clang-tools-extra/clangd/TUScheduler.cpp index 4c6c8c679be3..1e64fac80d94 100644 --- a/clang-tools-extra/clangd/TUScheduler.cpp +++ b/clang-tools-extra/clangd/TUScheduler.cpp @@ -390,13 +390,16 @@ class PreambleThrottlerRequest { PreambleThrottlerRequest(llvm::StringRef Filename, PreambleThrottler *Throttler, std::condition_variable &CV) - : Throttler(Throttler), Satisfied(Throttler == nullptr) { + : Throttler(Throttler), + Satisfied(Throttler == nullptr) { // If there is no throttler, this dummy request is always satisfied. if (!Throttler) return; + Tracer.emplace("PreambleThrottled"); ID = Throttler->acquire(Filename, [&] { Satisfied.store(true, std::memory_order_release); CV.notify_all(); + Tracer.reset(); }); } @@ -411,6 +414,7 @@ class PreambleThrottlerRequest { } private: + llvm::Optional<trace::Span> Tracer; PreambleThrottler::RequestID ID; PreambleThrottler *Throttler; std::atomic<bool> Satisfied = {false}; @@ -473,13 +477,18 @@ class PreambleThread { if (Done) break; - Throttle.emplace(FileName, Throttler, ReqCV); - // If acquire succeeded synchronously, avoid status jitter. - if (!Throttle->satisfied()) - Status.update([&](TUStatus &Status) { - Status.PreambleActivity = PreambleAction::Queued; - }); - ReqCV.wait(Lock, [&] { return Throttle->satisfied() || Done; }); + { + Throttle.emplace(FileName, Throttler, ReqCV); + llvm::Optional<trace::Span> Tracer; + // If acquire succeeded synchronously, avoid status jitter. + if (!Throttle->satisfied()) { + Tracer.emplace("PreambleThrottle"); + Status.update([&](TUStatus &Status) { + Status.PreambleActivity = PreambleAction::Queued; + }); + } + ReqCV.wait(Lock, [&] { return Throttle->satisfied() || Done; }); + } if (Done) break; // While waiting for the throttler, the request may have been updated! _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits