[PATCH] D55359: [clangd] Avoid emitting Queued status when we are able to acquire the Barrier.
Haojian Wu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 13 05:13:12 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL349032: [clangd] Avoid emitting Queued status when we are able to acquire the Barrier. (authored by hokein, committed by ).
Herald added a subscriber: llvm-commits.
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55359/new/
https://reviews.llvm.org/D55359
Files:
clang-tools-extra/trunk/clangd/TUScheduler.cpp
clang-tools-extra/trunk/clangd/Threading.cpp
clang-tools-extra/trunk/clangd/Threading.h
clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp
Index: clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp
===================================================================
--- clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp
+++ clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp
@@ -698,13 +698,11 @@
EXPECT_THAT(CaptureTUStatus.AllStatus,
ElementsAre(
// Statuses of "Update" action.
- TUState(TUAction::Queued, "Update"),
TUState(TUAction::RunningAction, "Update"),
TUState(TUAction::BuildingPreamble, "Update"),
TUState(TUAction::BuildingFile, "Update"),
// Statuses of "Definitions" action
- TUState(TUAction::Queued, "Definitions"),
TUState(TUAction::RunningAction, "Definitions"),
TUState(TUAction::Idle, /*No action*/ "")));
}
Index: clang-tools-extra/trunk/clangd/Threading.cpp
===================================================================
--- clang-tools-extra/trunk/clangd/Threading.cpp
+++ clang-tools-extra/trunk/clangd/Threading.cpp
@@ -28,6 +28,15 @@
Semaphore::Semaphore(std::size_t MaxLocks) : FreeSlots(MaxLocks) {}
+bool Semaphore::try_lock() {
+ std::unique_lock<std::mutex> Lock(Mutex);
+ if (FreeSlots > 0) {
+ --FreeSlots;
+ return true;
+ }
+ return false;
+}
+
void Semaphore::lock() {
trace::Span Span("WaitForFreeSemaphoreSlot");
// trace::Span can also acquire locks in ctor and dtor, we make sure it
Index: clang-tools-extra/trunk/clangd/TUScheduler.cpp
===================================================================
--- clang-tools-extra/trunk/clangd/TUScheduler.cpp
+++ clang-tools-extra/trunk/clangd/TUScheduler.cpp
@@ -634,9 +634,11 @@
} // unlock Mutex
{
- // FIXME: only emit this status when the Barrier couldn't be acquired.
- emitTUStatus({TUAction::Queued, Req.Name});
- std::lock_guard<Semaphore> BarrierLock(Barrier);
+ std::unique_lock<Semaphore> Lock(Barrier, std::try_to_lock);
+ if (!Lock.owns_lock()) {
+ emitTUStatus({TUAction::Queued, Req.Name});
+ Lock.lock();
+ }
WithContext Guard(std::move(Req.Ctx));
trace::Span Tracer(Req.Name);
emitTUStatus({TUAction::RunningAction, Req.Name});
Index: clang-tools-extra/trunk/clangd/Threading.h
===================================================================
--- clang-tools-extra/trunk/clangd/Threading.h
+++ clang-tools-extra/trunk/clangd/Threading.h
@@ -42,6 +42,7 @@
public:
Semaphore(std::size_t MaxLocks);
+ bool try_lock();
void lock();
void unlock();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55359.178037.patch
Type: text/x-patch
Size: 2654 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181213/e716d254/attachment.bin>
More information about the llvm-commits
mailing list