@ -82,36 +82,38 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
blockProcessTime . push_front ( qMakePair ( currentDate . toMSecsSinceEpoch ( ) , nVerificationProgress ) ) ;
blockProcessTime . push_front ( qMakePair ( currentDate . toMSecsSinceEpoch ( ) , nVerificationProgress ) ) ;
// show progress speed if we have more then one sample
// show progress speed if we have more then one sample
if ( blockProcessTime . size ( ) > = 2 )
if ( blockProcessTime . size ( ) > = 2 ) {
{
double progressStart = blockProcessTime [ 0 ] . second ;
double progressDelta = 0 ;
double progressDelta = 0 ;
double progressPerHour = 0 ;
double progressPerHour = 0 ;
qint64 timeDelta = 0 ;
qint64 timeDelta = 0 ;
qint64 remainingMSecs = 0 ;
qint64 remainingMSecs = 0 ;
double remainingProgress = 1.0 - nVerificationProgress ;
double remainingProgress = 1.0 - nVerificationProgress ;
for ( int i = 1 ; i < blockProcessTime . size ( ) ; i + + )
for ( int i = 1 ; i < blockProcessTime . size ( ) ; i + + ) {
{
QPair < qint64 , double > sample = blockProcessTime [ i ] ;
QPair < qint64 , double > sample = blockProcessTime [ i ] ;
// take first sample after 500 seconds or last available one
// take first sample after 500 seconds or last available one
if ( sample . first < ( currentDate . toMSecsSinceEpoch ( ) - 500 * 1000 ) | | i = = blockProcessTime . size ( ) - 1 ) {
if ( sample . first < ( currentDate . toMSecsSinceEpoch ( ) - 500 * 1000 ) | | i = = blockProcessTime . size ( ) - 1 ) {
progressDelta = progressStart - sample . second ;
progressDelta = blockProcessTime [ 0 ] . second - sample . second ;
timeDelta = blockProcessTime [ 0 ] . first - sample . first ;
timeDelta = blockProcessTime [ 0 ] . first - sample . first ;
progressPerHour = progressDelta / ( double ) timeDelta * 1000 * 3600 ;
progressPerHour = progressDelta / ( double ) timeDelta * 1000 * 3600 ;
remainingMSecs = remainingProgress / progressDelta * timeDelta ;
remainingMSecs = ( progressDelta > 0 ) ? remainingProgress / progressDelta * timeDelta : - 1 ;
break ;
break ;
}
}
}
}
// show progress increase per hour
// show progress increase per hour
ui - > progressIncreasePerH - > setText ( QString : : number ( progressPerHour * 100 , ' f ' , 2 ) + " % " ) ;
ui - > progressIncreasePerH - > setText ( QString : : number ( progressPerHour * 100 , ' f ' , 2 ) + " % " ) ;
// show expected remaining time
// show expected remaining time
ui - > expectedTimeLeft - > setText ( GUIUtil : : formatNiceTimeOffset ( remainingMSecs / 1000.0 ) ) ;
if ( remainingMSecs > = 0 ) {
ui - > expectedTimeLeft - > setText ( GUIUtil : : formatNiceTimeOffset ( remainingMSecs / 1000.0 ) ) ;
} else {
ui - > expectedTimeLeft - > setText ( QObject : : tr ( " unknown " ) ) ;
}
static const int MAX_SAMPLES = 5000 ;
static const int MAX_SAMPLES = 5000 ;
if ( blockProcessTime . count ( ) > MAX_SAMPLES )
if ( blockProcessTime . count ( ) > MAX_SAMPLES ) {
blockProcessTime . remove ( MAX_SAMPLES , blockProcessTime . count ( ) - MAX_SAMPLES ) ;
blockProcessTime . remove ( MAX_SAMPLES , blockProcessTime . count ( ) - MAX_SAMPLES ) ;
}
}
}
// show the last block date
// show the last block date