diff --git a/src/modules/MeasureTool/MeasureToolCore/OverlayUI.cpp b/src/modules/MeasureTool/MeasureToolCore/OverlayUI.cpp index 39707ea936..8ede412f24 100644 --- a/src/modules/MeasureTool/MeasureToolCore/OverlayUI.cpp +++ b/src/modules/MeasureTool/MeasureToolCore/OverlayUI.cpp @@ -178,7 +178,6 @@ template inline std::unique_ptr OverlayUIState::CreateInternal(ToolT& toolState, TickFuncT tickFunc, CommonState& commonState, - Latch& creationLatch, const wchar_t* toolWindowClassName, void* windowParam, const MonitorInfo& monitor, @@ -196,9 +195,6 @@ inline std::unique_ptr OverlayUIState::CreateInternal(ToolT& too auto* state = uiState.get(); uiCreatedEvent.SetEvent(); - // Wait until all OverlayUI threads created their corresponding d2d devices - creationLatch.arrive_and_wait(); - state->RunUILoop(); commonState.closeOnOtherMonitors = true; @@ -211,14 +207,12 @@ inline std::unique_ptr OverlayUIState::CreateInternal(ToolT& too } std::unique_ptr OverlayUIState::Create(Serialized& toolState, - Latch& creationLatch, CommonState& commonState, const MonitorInfo& monitor) { return OverlayUIState::CreateInternal(toolState, DrawMeasureToolTick, commonState, - creationLatch, NonLocalizable::MeasureToolOverlayWindowName, &toolState, monitor, @@ -226,14 +220,12 @@ std::unique_ptr OverlayUIState::Create(Serialized OverlayUIState::Create(BoundsToolState& toolState, - Latch& creationLatch, CommonState& commonState, const MonitorInfo& monitor) { return OverlayUIState::CreateInternal(toolState, DrawBoundsToolTick, commonState, - creationLatch, NonLocalizable::BoundsToolOverlayWindowName, &toolState, monitor, diff --git a/src/modules/MeasureTool/MeasureToolCore/OverlayUI.h b/src/modules/MeasureTool/MeasureToolCore/OverlayUI.h index 0e75cea592..e4d2b1ddfe 100644 --- a/src/modules/MeasureTool/MeasureToolCore/OverlayUI.h +++ b/src/modules/MeasureTool/MeasureToolCore/OverlayUI.h @@ -1,7 +1,6 @@ #pragma once #include "D2DState.h" -#include "latch.h" #include "ToolState.h" #include @@ -28,7 +27,6 @@ class OverlayUIState final static std::unique_ptr CreateInternal(ToolT& toolState, TickFuncT tickFunc, CommonState& commonState, - Latch& creationLatch, const wchar_t* toolWindowClassName, void* windowParam, const MonitorInfo& monitor, @@ -39,11 +37,9 @@ public: ~OverlayUIState(); static std::unique_ptr Create(BoundsToolState& toolState, - Latch& creationLatch, CommonState& commonState, const MonitorInfo& monitor); static std::unique_ptr Create(Serialized& toolState, - Latch& creationLatch, CommonState& commonState, const MonitorInfo& monitor); inline HWND overlayWindowHandle() const diff --git a/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.cpp b/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.cpp index 910ce5e64f..f7e613a2b6 100644 --- a/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.cpp +++ b/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.cpp @@ -79,15 +79,12 @@ namespace winrt::PowerToys::MeasureToolCore::implementation #if defined(DEBUG_PRIMARY_MONITOR_ONLY) const auto& monitorInfo = MonitorInfo::GetPrimaryMonitor(); - Latch createOverlayUILatch{ 1 }; #else const auto monitors = MonitorInfo::GetMonitors(true); - Latch createOverlayUILatch{ static_cast(monitors.size()) }; for (const auto& monitorInfo : monitors) #endif { auto overlayUI = OverlayUIState::Create(_boundsToolState, - createOverlayUILatch, _commonState, monitorInfo); #if !defined(DEBUG_PRIMARY_MONITOR_ONLY) @@ -118,15 +115,12 @@ namespace winrt::PowerToys::MeasureToolCore::implementation #if defined(DEBUG_PRIMARY_MONITOR_ONLY) std::vector monitors = { MonitorInfo::GetPrimaryMonitor() }; const auto& monitorInfo = monitors[0]; - Latch createOverlayUILatch{ 1 }; #else const auto monitors = MonitorInfo::GetMonitors(true); - Latch createOverlayUILatch{ static_cast(monitors.size()) }; for (const auto& monitorInfo : monitors) #endif { auto overlayUI = OverlayUIState::Create(_measureToolState, - createOverlayUILatch, _commonState, monitorInfo); #if !defined(DEBUG_PRIMARY_MONITOR_ONLY) diff --git a/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.vcxproj b/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.vcxproj index e0512f0547..9780d0d09a 100644 --- a/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.vcxproj +++ b/src/modules/MeasureTool/MeasureToolCore/PowerToys.MeasureToolCore.vcxproj @@ -86,7 +86,6 @@ - diff --git a/src/modules/MeasureTool/MeasureToolCore/latch.h b/src/modules/MeasureTool/MeasureToolCore/latch.h deleted file mode 100644 index b3993f6223..0000000000 --- a/src/modules/MeasureTool/MeasureToolCore/latch.h +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once - -#if __has_include() -#include -using Latch = std::latch; -#else -#include -#include -#include - -class Latch -{ -public: - [[nodiscard]] static constexpr ptrdiff_t(max)() noexcept - { - return (1ULL << (sizeof(ptrdiff_t) * CHAR_BIT - 1)) - 1; - } - - constexpr explicit Latch(const std::ptrdiff_t _Expected) noexcept : - _Counter{ _Expected } - { - } - - Latch(const Latch&) = delete; - Latch& operator=(const Latch&) = delete; - - void count_down(const ptrdiff_t _Update = 1) noexcept - { - const ptrdiff_t _Current = _Counter.fetch_sub(_Update) - _Update; - if (_Current == 0) - { - _Counter.notify_all(); - } - } - - [[nodiscard]] bool try_wait() const noexcept - { - return _Counter.load() == 0; - } - - void wait() const noexcept - { - for (;;) - { - const ptrdiff_t _Current = _Counter.load(); - if (_Current == 0) - { - return; - } - else - _Counter.wait(_Current, std::memory_order_relaxed); - } - } - - void arrive_and_wait(const ptrdiff_t _Update = 1) noexcept - { - const ptrdiff_t _Current = _Counter.fetch_sub(_Update) - _Update; - if (_Current == 0) - { - _Counter.notify_all(); - } - else - { - _Counter.wait(_Current, std::memory_order_relaxed); - wait(); - } - } - -private: - std::atomic _Counter; -}; - -#endif \ No newline at end of file