From d2b24e8689bd50dbe7b6d02b255aeb836734b801 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 18 May 2023 18:58:40 +0200 Subject: [PATCH] Rate limit progress-report, reduce excessive UI load Session-archive or region analysis can produce excessive progress callbacks (for each N samples read from disk). --- gtk2_ardour/progress_reporter.cc | 11 ++++++++--- gtk2_ardour/progress_reporter.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/progress_reporter.cc b/gtk2_ardour/progress_reporter.cc index 0fac4555a0..20cfb56cc8 100644 --- a/gtk2_ardour/progress_reporter.cc +++ b/gtk2_ardour/progress_reporter.cc @@ -23,19 +23,24 @@ #include "progress_reporter.h" ProgressReporter::ProgressReporter () + : _p (-1) { - } ProgressReporter::~ProgressReporter () { - } void ProgressReporter::set_overall_progress (float p) { + /* rate-limit, move in 0.2% steps */ + int pt = 500 * p; + if (pt == _p && p > 0 && p < 1.0) { + return; + } + _p = pt; + update_progress_gui (p); ARDOUR::GUIIdle (); } - diff --git a/gtk2_ardour/progress_reporter.h b/gtk2_ardour/progress_reporter.h index a1c62bf44a..96be82181b 100644 --- a/gtk2_ardour/progress_reporter.h +++ b/gtk2_ardour/progress_reporter.h @@ -35,6 +35,7 @@ private: * @param p Progress, from 0 to 1. */ virtual void update_progress_gui (float p) = 0; + int _p; }; #endif