diff options
| author | nyx <nnyyxxxx@protonmail.com> | 2025-03-31 12:06:17 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-31 18:06:17 +0200 |
| commit | 2309270752383be30857d9c15cd3e259c4e6ed58 (patch) | |
| tree | b99b1571301427f1affde5bdfc3d62e8c6fd0c5b /src | |
| parent | 79b526a04199a05d1e9b0bbb035ba20b652a7a2b (diff) | |
anr: add config for ping number before popup shows up (#9782)
* anr: make pings configurable
makes the pings of the dialog popup configurable
Diffstat (limited to 'src')
| -rw-r--r-- | src/config/ConfigDescriptions.hpp | 6 | ||||
| -rw-r--r-- | src/config/ConfigManager.cpp | 1 | ||||
| -rw-r--r-- | src/managers/ANRManager.cpp | 13 | ||||
| -rw-r--r-- | src/managers/ANRManager.hpp | 2 |
4 files changed, 16 insertions, 6 deletions
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 3e9563ee..234c3743 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1223,6 +1223,12 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, + SConfigOptionDescription{ + .value = "misc:anr_missed_pings", + .description = "number of missed pings before showing the ANR dialog", + .type = CONFIG_OPTION_INT, + .data = SConfigOptionDescription::SRangeData{1, 1, 10}, + }, /* * binds: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 276e6db0..9fae42e1 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -460,6 +460,7 @@ CConfigManager::CConfigManager() { registerConfigVar("misc:disable_hyprland_qtutils_check", Hyprlang::INT{0}); registerConfigVar("misc:lockdead_screen_delay", Hyprlang::INT{1000}); registerConfigVar("misc:enable_anr_dialog", Hyprlang::INT{1}); + registerConfigVar("misc:anr_missed_pings", Hyprlang::INT{1}); registerConfigVar("group:insert_after_current", Hyprlang::INT{1}); registerConfigVar("group:focus_removed_window", Hyprlang::INT{1}); diff --git a/src/managers/ANRManager.cpp b/src/managers/ANRManager.cpp index ebf02001..3debcda8 100644 --- a/src/managers/ANRManager.cpp +++ b/src/managers/ANRManager.cpp @@ -41,7 +41,8 @@ CANRManager::CANRManager() { void CANRManager::onTick() { std::erase_if(m_data, [](const auto& e) { return e->isDefunct(); }); - static auto PENABLEANR = CConfigValue<Hyprlang::INT>("misc:enable_anr_dialog"); + static auto PENABLEANR = CConfigValue<Hyprlang::INT>("misc:enable_anr_dialog"); + static auto PANRTHRESHOLD = CConfigValue<Hyprlang::INT>("misc:anr_missed_pings"); if (!*PENABLEANR) { m_timer->updateTimeout(TIMER_TIMEOUT * 10); @@ -66,7 +67,7 @@ void CANRManager::onTick() { if (count == 0) continue; - if (data->missedResponses > 0) { + if (data->missedResponses >= *PANRTHRESHOLD) { if (!data->isThreadRunning() && !data->dialogThreadSaidWait) { data->runDialog("Application Not Responding", firstWindow->m_szTitle, firstWindow->m_szClass, data->getPid()); @@ -128,7 +129,8 @@ bool CANRManager::isNotResponding(PHLWINDOW pWindow) { } bool CANRManager::isNotResponding(SP<CANRManager::SANRData> data) { - return data->missedResponses > 1; + static auto PANRTHRESHOLD = CConfigValue<Hyprlang::INT>("misc:anr_missed_pings"); + return data->missedResponses > *PANRTHRESHOLD; } SP<CANRManager::SANRData> CANRManager::dataFor(PHLWINDOW pWindow) { @@ -203,12 +205,13 @@ bool CANRManager::SANRData::isThreadRunning() { return pthread_kill(dialogThread.native_handle(), 0) != ESRCH; } -void CANRManager::SANRData::killDialog() const { +void CANRManager::SANRData::killDialog() { if (!dialogProc) return; if (!dialogProc->pid()) { - Debug::log(ERR, "ANR: cannot kill dialogProc, as it doesn't have a pid. If you have hyprutils <= 0.6.0, you will crash soon. Otherwise, dialog failed to spawn??"); + Debug::log(ERR, "ANR: cannot kill dialogProc, as it doesn't have a pid."); + dialogProc = nullptr; return; } diff --git a/src/managers/ANRManager.hpp b/src/managers/ANRManager.hpp index 26319776..4d838f57 100644 --- a/src/managers/ANRManager.hpp +++ b/src/managers/ANRManager.hpp @@ -43,7 +43,7 @@ class CANRManager { void runDialog(const std::string& title, const std::string& appName, const std::string appClass, pid_t dialogWmPID); bool isThreadRunning(); - void killDialog() const; + void killDialog(); bool isDefunct() const; bool fitsWindow(PHLWINDOW pWindow) const; pid_t getPid() const; |
