Merge #11237: qt: Fixing division by zero in time remaining
c8d38abd6
Refactor tipUpdate as per style guide (MeshCollider)3b69a08c5
Fix division by zero in time remaining (MeshCollider) Pull request description: Fixes https://github.com/bitcoin/bitcoin/issues/10291, https://github.com/bitcoin/bitcoin/issues/11265 progressDelta may be 0 (or even negative according to 11265), this checks for that and prints unknown if it is, because we cannot calculate an estimate for the time remaining (would be infinite or negative). Tree-SHA512: bc5708e5ed6e4670d008219558c5fbb25709bd99a32c98ec39bb74f94a0b7fa058f3d03389ccdd39e6723e6b5b48e34b13ceee7c051c2db631e51d8ec3e1d68c
This commit is contained in:
commit
e7f125562f
1 changed files with 14 additions and 12 deletions
|
@ -82,36 +82,38 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
|
|||
blockProcessTime.push_front(qMakePair(currentDate.toMSecsSinceEpoch(), nVerificationProgress));
|
||||
|
||||
// show progress speed if we have more then one sample
|
||||
if (blockProcessTime.size() >= 2)
|
||||
{
|
||||
double progressStart = blockProcessTime[0].second;
|
||||
if (blockProcessTime.size() >= 2) {
|
||||
double progressDelta = 0;
|
||||
double progressPerHour = 0;
|
||||
qint64 timeDelta = 0;
|
||||
qint64 remainingMSecs = 0;
|
||||
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];
|
||||
|
||||
// take first sample after 500 seconds or last available one
|
||||
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;
|
||||
progressPerHour = progressDelta/(double)timeDelta*1000*3600;
|
||||
remainingMSecs = remainingProgress / progressDelta * timeDelta;
|
||||
progressPerHour = progressDelta / (double) timeDelta * 1000 * 3600;
|
||||
remainingMSecs = (progressDelta > 0) ? remainingProgress / progressDelta * timeDelta : -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 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
|
||||
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;
|
||||
if (blockProcessTime.count() > MAX_SAMPLES)
|
||||
blockProcessTime.remove(MAX_SAMPLES, blockProcessTime.count()-MAX_SAMPLES);
|
||||
if (blockProcessTime.count() > MAX_SAMPLES) {
|
||||
blockProcessTime.remove(MAX_SAMPLES, blockProcessTime.count() - MAX_SAMPLES);
|
||||
}
|
||||
}
|
||||
|
||||
// show the last block date
|
||||
|
|
Loading…
Add table
Reference in a new issue