diff --git a/src/murmur/Server.cpp b/src/murmur/Server.cpp index 1088b3233..b84079a54 100644 --- a/src/murmur/Server.cpp +++ b/src/murmur/Server.cpp @@ -481,15 +481,26 @@ int BandwidthRecord::idleSeconds() const { } int BandwidthRecord::bandwidth() const { - int sincelast = static_cast(a_qtWhen[(iRecNum + N_BANDWIDTH_SLOTS - 1) % N_BANDWIDTH_SLOTS].elapsed() / 10000LL); - int todo = N_BANDWIDTH_SLOTS - sincelast; - if (todo < 0) + int sum = 0; + int records = 0; + quint64 elapsed = 0ULL; + + for(int i=1;i 1000000ULL) { + break; + } else { + ++records; + sum += a_iBW[idx]; + elapsed = e; + } + } + + if (elapsed < 250000ULL) return 0; - int sum = 0; - for (int i=1;i<=todo;++i) - sum += a_iBW[(iRecNum+N_BANDWIDTH_SLOTS - i) % N_BANDWIDTH_SLOTS]; - return (sum*100)/N_BANDWIDTH_SLOTS; + return static_cast((sum * 1000000ULL) / elapsed); } ExecEvent::ExecEvent(boost::function f) : QEvent(static_cast(EXEC_QEVENT)) {