diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 229fd98757..0774d91a7b 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -5,10 +5,14 @@ #include "pch.h" #include "TerminalPage.h" -#include -#include #include +#include +#include +#include +#include "../../types/inc/ColorFix.hpp" +#include "../../types/inc/utils.hpp" +#include "../TerminalSettingsAppAdapterLib/TerminalSettings.h" #include "App.h" #include "DebugTapConnection.h" #include "MarkdownPaneContent.h" @@ -18,9 +22,6 @@ #include "SnippetsPaneContent.h" #include "TabRowControl.h" #include "TerminalSettingsCache.h" -#include "../../types/inc/ColorFix.hpp" -#include "../../types/inc/utils.hpp" -#include "../TerminalSettingsAppAdapterLib/TerminalSettings.h" #include "LaunchPositionRequest.g.cpp" #include "RenameWindowRequestedArgs.g.cpp" @@ -5000,9 +5001,10 @@ namespace winrt::TerminalApp::implementation void TerminalPage::_adjustProcessPriority() const { // Windowing is single-threaded, so this will not cause a race condition. - static bool supported{ true }; + static uint64_t s_lastUpdateHash{ 0 }; + static bool s_supported{ true }; - if (!supported || !_hostingHwnd.has_value()) + if (!s_supported || !_hostingHwnd.has_value()) { return; } @@ -5066,11 +5068,20 @@ namespace winrt::TerminalApp::implementation } const auto count{ gsl::narrow_cast(it - processes.begin()) }; + const auto hash = til::hash((void*)processes.data(), count * sizeof(HANDLE)); + + if (hash == s_lastUpdateHash) + { + return; + } + + s_lastUpdateHash = hash; const auto hr = TerminalTrySetWindowAssociatedProcesses(_hostingHwnd.value(), count, count ? processes.data() : nullptr); + if (S_FALSE == hr) { // Don't bother trying again or logging. The wrapper tells us it's unsupported. - supported = false; + s_supported = false; return; }