@@ -49,12 +49,13 @@ Scheduler::Scheduler(QObject *parent) : QObject(parent)
4949 , m_queueModel(new QueueModel(this ))
5050 , m_networkManager(new NetworkManager(this ))
5151 , m_snapshot(new Snapshot(this ))
52- , m_speedTimer (new QTimer(this ))
52+ , m_metricsTimer (new QTimer(this ))
5353{
54- connect (this , SIGNAL (jobFinished (AbstractJob*)),
55- this , SLOT (startNext (AbstractJob*)));
54+ connect (this , SIGNAL (jobFinished (AbstractJob*)), this , SLOT (startNext (AbstractJob*)));
5655
57- connect (m_speedTimer, SIGNAL (timeout ()), this , SLOT (onSpeedTimerTimeout ()));
56+ connect (m_metricsTimer, SIGNAL (timeout ()), this , SLOT (onMetricsTimerTimeout ()));
57+ m_metricsTimer->setSingleShot (false );
58+ m_metricsTimer->start (METRICS_TIMEOUT_MSEC);
5859}
5960
6061Scheduler::~Scheduler ()
@@ -293,24 +294,34 @@ QList<AbstractJob*> Scheduler::runningJobs() const
293294
294295/* *****************************************************************************
295296 ******************************************************************************/
296- void Scheduler::onSpeedTimerTimeout ()
297+ qreal Scheduler::totalSpeed ()
297298{
298- m_speedTimer->stop ();
299- m_previouSpeed = 0 ;
300- emit onJobChanged ();
299+ return m_metricsSpeed;
301300}
302301
303- qreal Scheduler::totalSpeed ()
302+ void Scheduler::onMetricsTimerTimeout ()
304303{
305304 qreal speed = 0 ;
306305 for (auto job : jobs ()) {
307- speed += qMax (job->speed (), qreal (0 ));
306+ speed += qMax (job->speed (), qreal (0 )); // speed is negative for pending jobs
308307 }
308+
309309 if (speed > 0 ) {
310- m_previouSpeed = speed;
311- m_speedTimer->start (MSEC_SPEED_DISPLAY_TIME);
310+ m_metricsLoopCount = 0 ;
311+ } else {
312+ // When speed is 0 (i.e. all jobs are finished), the metrics aren't updated immediatelty.
313+ // Instead, the previous metrics is kept as-is for a couple of seconds,
314+ // to let us read the values, then it's updated.
315+ if (m_metricsLoopCount < METRICS_LOOP_COUNTER) {
316+ m_metricsLoopCount++;
317+ return ;
318+ }
319+ }
320+
321+ if (m_metricsSpeed != speed) {
322+ m_metricsSpeed = speed;
323+ emit metricsChanged ();
312324 }
313- return m_previouSpeed;
314325}
315326
316327/* *****************************************************************************
0 commit comments