Merge pull request #1187 from bill-auger/job-weights

implement definable job weights
This commit is contained in:
Adriaan de Groot 2019-07-29 13:25:09 +02:00 committed by GitHub
commit 97384d3839
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 1 deletions

View File

@ -97,6 +97,13 @@ Job::~Job()
{} {}
qreal
Job::getJobWeight() const
{
return qreal( 1.0 );
}
QString QString
Job::prettyDescription() const Job::prettyDescription() const
{ {

View File

@ -83,6 +83,7 @@ public:
explicit Job( QObject* parent = nullptr ); explicit Job( QObject* parent = nullptr );
virtual ~Job(); virtual ~Job();
virtual qreal getJobWeight() const;
virtual QString prettyName() const = 0; virtual QString prettyName() const = 0;
virtual QString prettyDescription() const; virtual QString prettyDescription() const;
virtual QString prettyStatusMessage() const; virtual QString prettyStatusMessage() const;

View File

@ -48,6 +48,17 @@ public:
void setJobs( const JobList& jobs ) void setJobs( const JobList& jobs )
{ {
m_jobs = jobs; m_jobs = jobs;
qreal totalJobsWeight = 0.0;
for( auto job : m_jobs )
{
totalJobsWeight += job->getJobWeight();
}
for( auto job : m_jobs )
{
qreal jobWeight = qreal( job->getJobWeight() / totalJobsWeight );
m_jobWeights.append( jobWeight ) ;
}
} }
void run() override void run() override
@ -87,6 +98,7 @@ public:
private: private:
JobList m_jobs; JobList m_jobs;
QList< qreal > m_jobWeights;
JobQueue* m_queue; JobQueue* m_queue;
int m_jobIndex; int m_jobIndex;
@ -101,8 +113,22 @@ private:
? m_jobs.at( m_jobIndex )->prettyStatusMessage() ? m_jobs.at( m_jobIndex )->prettyStatusMessage()
: tr( "Done" ); : tr( "Done" );
qreal percent = ( m_jobIndex + jobPercent ) / qreal( jobCount ); qreal cumulativeProgress = 0.0;
for( auto jobWeight : m_jobWeights.mid( 0, m_jobIndex ) )
{
cumulativeProgress += jobWeight;
}
qreal percent = m_jobIndex < jobCount
? cumulativeProgress + ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent )
: 1.0;
if (m_jobIndex < jobCount)
{
cDebug(Logger::LOGVERBOSE) << "[JOBQUEUE]: Progress for Job[" << m_jobIndex << "]: " << ( jobPercent * 100 ) << "% completed";
cDebug(Logger::LOGVERBOSE) << "[JOBQUEUE]: Progress Overall: " << ( cumulativeProgress * 100 ) << "% (accumulated) + "
<< ( ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) * 100 ) << "% (this job) = "
<< ( percent * 100 ) << "% (total)";
}
QMetaObject::invokeMethod( m_queue, "progress", Qt::QueuedConnection, QMetaObject::invokeMethod( m_queue, "progress", Qt::QueuedConnection,
Q_ARG( qreal, percent ), Q_ARG( qreal, percent ),
Q_ARG( QString, message ) Q_ARG( QString, message )