wsd/Admin.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
New commits: commit 4082a462dad52151907fe71f5780cb82b0d272a7 Author: Ashod Nakashian <[email protected]> AuthorDate: Sat Jun 27 16:56:51 2020 -0400 Commit: Ashod Nakashian <[email protected]> CommitDate: Thu Jul 2 02:33:25 2020 +0200 wsd: admin: don't poll rapidly when cleanup is disabled When per_document.cleanup is disabled, the time between the last cleanup (which never happened) grows indefinitely, which results in minimal polling time intervals. This wastes valuable cpu cycles unnecessarily. When cleanup is disabled, there is no need to calculate the next cleanup time. The maximum is reasonable (although it should really be infinity). Change-Id: I71d065441c4c2ff96fe31e6a45a5ecfdd2f85d49 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/97471 Tested-by: Jenkins Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Ashod Nakashian <[email protected]> diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp index 996e7b75c..02be6fcfd 100644 --- a/wsd/Admin.cpp +++ b/wsd/Admin.cpp @@ -415,14 +415,12 @@ Admin::~Admin() void Admin::pollingThread() { - std::chrono::steady_clock::time_point lastCPU, lastMem, lastNet, lastCleanup; - _model.setThreadOwner(std::this_thread::get_id()); - lastCPU = std::chrono::steady_clock::now(); - lastMem = lastCPU; - lastNet = lastCPU; - lastCleanup = lastCPU; + std::chrono::steady_clock::time_point lastCPU = std::chrono::steady_clock::now(); + std::chrono::steady_clock::time_point lastMem = lastCPU; + std::chrono::steady_clock::time_point lastNet = lastCPU; + std::chrono::steady_clock::time_point lastCleanup = lastCPU; while (!isStop() && !SigUtil::getTerminationFlag() && !SigUtil::getShutdownRequestFlag()) { @@ -484,14 +482,15 @@ void Admin::pollingThread() lastNet = now; } - int cleanupWait = _cleanupIntervalMs - - std::chrono::duration_cast<std::chrono::milliseconds>(now - lastCleanup).count(); - if (cleanupWait <= MinStatsIntervalMs / 2) // Close enough + int cleanupWait = _cleanupIntervalMs; + if (_defDocProcSettings.getCleanupSettings().getEnable()) { - if (_defDocProcSettings.getCleanupSettings().getEnable()) + cleanupWait + -= std::chrono::duration_cast<std::chrono::milliseconds>(now - lastCleanup).count(); + if (cleanupWait <= MinStatsIntervalMs / 2) // Close enough { cleanupResourceConsumingDocs(); - + cleanupWait += _cleanupIntervalMs; lastCleanup = now; } @@ -509,7 +508,8 @@ void Admin::pollingThread() } // Handle websockets & other work. - const int timeout = capAndRoundInterval(std::min(std::min(std::min(cpuWait, memWait), netWait), cleanupWait)); + const int timeout = capAndRoundInterval( + std::min(std::min(std::min(cpuWait, memWait), netWait), cleanupWait)); LOG_TRC("Admin poll for " << timeout << "ms."); poll(timeout * 1000); // continue with ms for admin, settings etc. } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
