[gnome-system-monitor] Fixed logic for scaling net load when using bits.
- From: Chris KÃhl <chriskuehl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-system-monitor] Fixed logic for scaling net load when using bits.
- Date: Wed, 9 Nov 2011 22:50:58 +0000 (UTC)
commit c3c986f6c888a274278a1e5a112befedc23abc6d
Author: Conor O'Gorman <conor dna ie>
Date: Thu Aug 18 18:41:02 2011 +0100
Fixed logic for scaling net load when using bits.
Signed-off-by: Conor O'Gorman <conor dna ie>
https://bugzilla.gnome.org/show_bug.cgi?id=656840
src/load-graph.cpp | 46 +++++++++++++++++++++++++++++++++++++++-------
1 files changed, 39 insertions(+), 7 deletions(-)
---
diff --git a/src/load-graph.cpp b/src/load-graph.cpp
index c4cc936..028782e 100644
--- a/src/load-graph.cpp
+++ b/src/load-graph.cpp
@@ -371,6 +371,33 @@ get_memory (LoadGraph *graph)
graph->data[0][1] = swappercent;
}
+/* Nice Numbers for Graph Labels after Paul Heckbert
+ nicenum: find a "nice" number approximately equal to x.
+ Round the number if round=1, take ceiling if round=0 */
+
+static double
+nicenum (double x, int round)
+{
+ int expv; /* exponent of x */
+ double f; /* fractional part of x */
+ double nf; /* nice, rounded fraction */
+
+ expv = floor( log10(x) );
+ f = x/pow( 10.0, expv ); /* between 1 and 10 */
+ if (round) {
+ if ( f < 1.5 ) nf = 1.0;
+ else if ( f < 3.0 ) nf = 2.0;
+ else if ( f < 7.0 ) nf = 5.0;
+ else nf = 10.0;
+ } else {
+ if ( f <= 1.0 ) nf = 1.0;
+ else if ( f <= 2.0 ) nf = 2.0;
+ else if ( f <= 5.0 ) nf = 5.0;
+ else nf = 10.0;
+ }
+ return nf * pow(10.0, expv);
+}
+
static void
net_scale (LoadGraph *graph, guint64 din, guint64 dout)
{
@@ -396,15 +423,20 @@ net_scale (LoadGraph *graph, guint64 din, guint64 dout)
const guint64 bak_max(new_max);
if (ProcData::get_instance()->config.network_in_bits) {
- // TODO: fix logic to give a nice scale with bits
+ // nice number is for the ticks
+ unsigned ticks = graph->num_bars();
- // round up to get some extra space
- // yes, it can overflow
- new_max = 1.1 * new_max;
- // make sure max is not 0 to avoid / 0
- // default to 125 bytes == 1kbit
- new_max = std::max(new_max, G_GUINT64_CONSTANT(125));
+ // gets messy at low values due to division by 8
+ guint64 bit_max = std::max( new_max*8, G_GUINT64_CONSTANT(10000) );
+
+ // our tick size leads to max
+ double d = nicenum(bit_max/ticks, 0);
+ bit_max = ticks * d;
+ new_max = bit_max / 8;
+ procman_debug("bak*8 %" G_GUINT64_FORMAT ", ticks %d, d %f"
+ ", bit_max %" G_GUINT64_FORMAT ", new_max %" G_GUINT64_FORMAT,
+ bak_max*8, ticks, d, bit_max, new_max );
} else {
// round up to get some extra space
// yes, it can overflow
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]