Auto merge of #4616 - daira:4615/hashrate-display, r=daira

Use SI prefixes for hash rates on the metrics screen

fixes #4615
This commit is contained in:
Homu 2020-07-17 19:11:36 +00:00
commit 6631f218d3
3 changed files with 68 additions and 11 deletions

View File

@ -134,3 +134,45 @@ TEST(Metrics, NextUpgrade) {
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT);
}
TEST(Metrics, DisplayFunctions) {
EXPECT_EQ(DisplayDuration(0, DurationFormat::REDUCED), "0 seconds");
EXPECT_EQ(DisplayDuration(59, DurationFormat::REDUCED), "59 seconds");
EXPECT_EQ(DisplayDuration(60, DurationFormat::REDUCED), "1 minutes");
EXPECT_EQ(DisplayDuration(61, DurationFormat::REDUCED), "1 minutes");
EXPECT_EQ(DisplayDuration(3599, DurationFormat::REDUCED), "59 minutes");
EXPECT_EQ(DisplayDuration(3600, DurationFormat::REDUCED), "1 hours");
EXPECT_EQ(DisplayDuration(86399, DurationFormat::REDUCED), "23 hours");
EXPECT_EQ(DisplayDuration(86400, DurationFormat::REDUCED), "1 days");
EXPECT_EQ(DisplayDuration(8640000, DurationFormat::REDUCED), "100 days");
EXPECT_EQ(DisplayDuration(185542587100800, DurationFormat::REDUCED), "2147483647 days");
EXPECT_EQ(DisplayDuration(185542587187199, DurationFormat::REDUCED), "2147483647 days");
EXPECT_EQ(DisplayDuration(0, DurationFormat::FULL), "0 seconds");
EXPECT_EQ(DisplayDuration(59, DurationFormat::FULL), "59 seconds");
EXPECT_EQ(DisplayDuration(60, DurationFormat::FULL), "1 minutes, 0 seconds");
EXPECT_EQ(DisplayDuration(61, DurationFormat::FULL), "1 minutes, 1 seconds");
EXPECT_EQ(DisplayDuration(3599, DurationFormat::FULL), "59 minutes, 59 seconds");
EXPECT_EQ(DisplayDuration(3600, DurationFormat::FULL), "1 hours, 0 minutes, 0 seconds");
EXPECT_EQ(DisplayDuration(86399, DurationFormat::FULL), "23 hours, 59 minutes, 59 seconds");
EXPECT_EQ(DisplayDuration(86400, DurationFormat::FULL), "1 days, 0 hours, 0 minutes, 0 seconds");
EXPECT_EQ(DisplayDuration(8640000, DurationFormat::FULL), "100 days, 0 hours, 0 minutes, 0 seconds");
EXPECT_EQ(DisplayDuration(185542587100800, DurationFormat::FULL), "2147483647 days, 0 hours, 0 minutes, 0 seconds");
EXPECT_EQ(DisplayDuration(185542587187199, DurationFormat::FULL), "2147483647 days, 23 hours, 59 minutes, 59 seconds");
EXPECT_EQ(DisplaySize(0), "0 Bytes");
EXPECT_EQ(DisplaySize(123), "123 Bytes");
EXPECT_EQ(DisplaySize(123456), "120.56 KiB");
EXPECT_EQ(DisplaySize(123456789), "117.74 MiB");
EXPECT_EQ(DisplaySize(123456789012), "114.98 GiB");
EXPECT_EQ(DisplaySize(1234567890123), "1.12 TiB");
EXPECT_EQ(DisplaySize(INT64_MAX), "8388608.00 TiB");
EXPECT_EQ(DisplayHashRate(0.0), "0.000 Sol/s");
EXPECT_EQ(DisplayHashRate(0.1234), "0.123 Sol/s");
EXPECT_EQ(DisplayHashRate(123.45), "123.450 Sol/s");
EXPECT_EQ(DisplayHashRate(1234.5), "1.234 kSol/s");
EXPECT_EQ(DisplayHashRate(1234567.8), "1.235 MSol/s");
EXPECT_EQ(DisplayHashRate(1234567890.1), "1.235 GSol/s");
EXPECT_EQ(DisplayHashRate(1234567890123.4), "1.235 TSol/s");
}

View File

@ -242,20 +242,38 @@ std::string DisplaySize(size_t value)
{
double coef = 1.0;
if (value < 1024.0 * coef)
return strprintf(_("%d Bytes"), value);
return strprintf(_("%d Bytes"), value);
coef *= 1024.0;
if (value < 1024.0 * coef)
return strprintf(_("%.2f KiB"), value / coef);
return strprintf(_("%.2f KiB"), value / coef);
coef *= 1024.0;
if (value < 1024.0 * coef)
return strprintf(_("%.2f MiB"), value / coef);
return strprintf(_("%.2f MiB"), value / coef);
coef *= 1024.0;
if (value < 1024.0 * coef)
return strprintf(_("%.2f GiB"), value / coef);
return strprintf(_("%.2f GiB"), value / coef);
coef *= 1024.0;
return strprintf(_("%.2f TiB"), value / coef);
}
std::string DisplayHashRate(double value)
{
double coef = 1.0;
if (value < 1000.0 * coef)
return strprintf(_("%.3f Sol/s"), value);
coef *= 1000.0;
if (value < 1000.0 * coef)
return strprintf(_("%.3f kSol/s"), value / coef);
coef *= 1000.0;
if (value < 1000.0 * coef)
return strprintf(_("%.3f MSol/s"), value / coef);
coef *= 1000.0;
if (value < 1000.0 * coef)
return strprintf(_("%.3f GSol/s"), value / coef);
coef *= 1000.0;
return strprintf(_("%.3f TSol/s"), value / coef);
}
boost::optional<int64_t> SecondsLeftToNextEpoch(const Consensus::Params& params, int currentHeight)
{
auto nextHeight = NextActivationHeight(currentHeight, params);
@ -276,7 +294,6 @@ int printStats(bool isScreen, bool mining)
int64_t currentHeadersTime;
size_t connections;
int64_t netsolps;
double netsolpsLog = 1.0;
const Consensus::Params& params = Params().GetConsensus();
{
LOCK2(cs_main, cs_vNodes);
@ -285,12 +302,8 @@ int printStats(bool isScreen, bool mining)
currentHeadersTime = pindexBestHeader ? pindexBestHeader->nTime : 0;
connections = vNodes.size();
netsolps = GetNetworkHashPS(120, -1);
netsolpsLog = std::log2(netsolps);
}
auto localsolps = GetLocalSolPS();
double localsolpsLog = 0.0;
if (localsolps > 0)
localsolpsLog = std::log2(localsolps);
if (IsInitialBlockDownload(Params())) {
if (fReindex) {
@ -347,9 +360,9 @@ int printStats(bool isScreen, bool mining)
}
std::cout << " " << _("Next upgrade") << " | " << strUpgradeTime << std::endl;
std::cout << " " << _("Connections") << " | " << connections << std::endl;
std::cout << " " << _("Network solution rate") << " | " << strprintf("~ 2^%.4f Sol/s", netsolpsLog) << std::endl;
std::cout << " " << _("Network solution rate") << " | " << DisplayHashRate(netsolps) << std::endl;
if (mining && miningTimer.running()) {
std::cout << " " << _("Local solution rate") << " | " << strprintf("~ 2^%.4f Sol/s", localsolpsLog) << std::endl;
std::cout << " " << _("Local solution rate") << " | " << DisplayHashRate(localsolps) << std::endl;
lines++;
}
std::cout << std::endl;

View File

@ -74,6 +74,8 @@ double GetLocalSolPS();
int EstimateNetHeight(const Consensus::Params& params, int currentBlockHeight, int64_t currentBlockTime);
boost::optional<int64_t> SecondsLeftToNextEpoch(const Consensus::Params& params, int currentHeight);
std::string DisplayDuration(int64_t time, DurationFormat format);
std::string DisplaySize(size_t value);
std::string DisplayHashRate(double value);
void TriggerRefresh();