summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/freebsd/btop_collect.cpp22
-rw-r--r--src/linux/btop_collect.cpp4
-rw-r--r--src/osx/btop_collect.cpp8
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<uint64_t>::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) {