From 64cdb4434371adee47c497c961eb5a4b2f447a4d Mon Sep 17 00:00:00 2001 From: aristocratos Date: Wed, 12 Jan 2022 20:49:27 +0100 Subject: [PATCH] Fixed: Net speed rollover for 32-bit --- src/freebsd/btop_collect.cpp | 22 ++++++++++++---------- src/linux/btop_collect.cpp | 4 ++-- src/osx/btop_collect.cpp | 8 +------- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/freebsd/btop_collect.cpp b/src/freebsd/btop_collect.cpp index e913c79..8531762 100644 --- a/src/freebsd/btop_collect.cpp +++ b/src/freebsd/btop_collect.cpp @@ -758,7 +758,7 @@ namespace Mem { disk_ios = 0; collect_disk(disks, mapping); - + old_uptime = uptime; } return mem; @@ -864,19 +864,21 @@ namespace Net { for (const string dir : {"download", "upload"}) { auto &saved_stat = net.at(iface).stat.at(dir); auto &bandwidth = net.at(iface).bandwidth.at(dir); - auto dirval = dir == "download" ? std::get<0>(ifstats[iface]) : std::get<1>(ifstats[iface]); - uint64_t val = saved_stat.last; - try { - val = max(dirval, val); - } catch (const std::invalid_argument &) { - } catch (const std::out_of_range &) { - } + uint64_t val = dir == "download" ? std::get<0>(ifstats[iface]) : std::get<1>(ifstats[iface]); //? Update speed, total and top values + if (val < saved_stat.last) { + saved_stat.rollover += saved_stat.last; + saved_stat.last = 0; + } + if (cmp_greater((unsigned long long)saved_stat.rollover + (unsigned long long)val, numeric_limits::max())) { + saved_stat.rollover = 0; + saved_stat.last = 0; + } saved_stat.speed = round((double)(val - saved_stat.last) / ((double)(new_timestamp - timestamp) / 1000)); if (saved_stat.speed > saved_stat.top) saved_stat.top = saved_stat.speed; - if (saved_stat.offset > val) saved_stat.offset = 0; - saved_stat.total = val - saved_stat.offset; + if (saved_stat.offset > val + saved_stat.rollover) saved_stat.offset = 0; + saved_stat.total = (val + saved_stat.rollover) - saved_stat.offset; saved_stat.last = val; //? Add values to graph diff --git a/src/linux/btop_collect.cpp b/src/linux/btop_collect.cpp index 4fe120d..79a6eac 100644 --- a/src/linux/btop_collect.cpp +++ b/src/linux/btop_collect.cpp @@ -1097,8 +1097,8 @@ namespace Net { auto& saved_stat = net.at(iface).stat.at(dir); auto& bandwidth = net.at(iface).bandwidth.at(dir); - uint64_t val = saved_stat.last; - try { val = max((uint64_t)stoull(readfile(sys_file, "0")), val); } + uint64_t val = 0; + try { val = (uint64_t)stoull(readfile(sys_file, "0")); } catch (const std::invalid_argument&) {} catch (const std::out_of_range&) {} diff --git a/src/osx/btop_collect.cpp b/src/osx/btop_collect.cpp index 5537d75..2451ea6 100644 --- a/src/osx/btop_collect.cpp +++ b/src/osx/btop_collect.cpp @@ -918,13 +918,7 @@ namespace Net { for (const string dir : {"download", "upload"}) { auto &saved_stat = net.at(iface).stat.at(dir); auto &bandwidth = net.at(iface).bandwidth.at(dir); - auto dirval = dir == "download" ? std::get<0>(ifstats[iface]) : std::get<1>(ifstats[iface]); - uint64_t val = saved_stat.last; - try { - val = max(dirval, val); - } catch (const std::invalid_argument &) { - } catch (const std::out_of_range &) { - } + uint64_t val = dir == "download" ? std::get<0>(ifstats[iface]) : std::get<1>(ifstats[iface]); //? Update speed, total and top values if (val < saved_stat.last) {