From 2b691500e068d00e0e9f8e6ba48fbe9e20ec3597 Mon Sep 17 00:00:00 2001 From: Ted Ying Date: Thu, 17 Aug 2017 19:04:43 -0400 Subject: [PATCH 2/2] Animate all graphed measurements at the same rate --- src/column-view.cpp | 10 ++++++++-- src/curve-view.cpp | 10 ++++++++-- src/value-history.cpp | 39 ++++++++++++++++++++++----------------- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/column-view.cpp b/src/column-view.cpp index 241f0fc..8e24f64 100644 --- a/src/column-view.cpp +++ b/src/column-view.cpp @@ -45,6 +45,8 @@ public: Monitor *monitor; private: + int draw_iterations_per_monitor_sample() const; + // a pixbuf is used for the columns std::auto_ptr columns; @@ -53,6 +55,10 @@ private: unsigned int color; }; +int ColumnGraph::draw_iterations_per_monitor_sample() const { + return monitor->update_interval() / CanvasView::draw_interval; +} + ColumnGraph::ColumnGraph(Monitor *m, unsigned int c) : monitor(m), value_history(m), remaining_draws(0), color(c) { @@ -64,7 +70,7 @@ void ColumnGraph::update(unsigned int max_samples) value_history.update(max_samples, new_value); if (new_value) - remaining_draws = CanvasView::draw_iterations; + remaining_draws = draw_iterations_per_monitor_sample(); } void ColumnGraph::draw(Gnome::Canvas::Canvas &canvas, @@ -75,7 +81,7 @@ void ColumnGraph::draw(Gnome::Canvas::Canvas &canvas, --remaining_draws; - double time_offset = double(remaining_draws) / CanvasView::draw_iterations; + double time_offset = double(remaining_draws) / draw_iterations_per_monitor_sample(); ValueHistory::iterator vi = value_history.values.begin(), vend = value_history.values.end(); diff --git a/src/curve-view.cpp b/src/curve-view.cpp index e3e12db..d0c3ba0 100644 --- a/src/curve-view.cpp +++ b/src/curve-view.cpp @@ -47,6 +47,8 @@ public: Monitor *monitor; private: + int draw_iterations_per_monitor_sample() const; + std::auto_ptr line; ValueHistory value_history; @@ -54,6 +56,10 @@ private: unsigned int color; }; +int Curve::draw_iterations_per_monitor_sample() const { + return monitor->update_interval() / CanvasView::draw_interval; +} + Curve::Curve(Monitor *m, unsigned int c) : monitor(m), value_history(m), remaining_draws(0), color(c) {} @@ -64,7 +70,7 @@ void Curve::update(unsigned int max_samples) value_history.update(max_samples, new_value); if (new_value) - remaining_draws = CanvasView::draw_iterations; + remaining_draws = draw_iterations_per_monitor_sample(); } void Curve::draw(Gnome::Canvas::Canvas &canvas, int width, int height, @@ -75,7 +81,7 @@ void Curve::draw(Gnome::Canvas::Canvas &canvas, int width, int height, --remaining_draws; - double time_offset = double(remaining_draws) / CanvasView::draw_iterations; + double time_offset = double(remaining_draws) / draw_iterations_per_monitor_sample(); ValueHistory::iterator vi = value_history.values.begin(), vend = value_history.values.end(); diff --git a/src/value-history.cpp b/src/value-history.cpp index 6a6552f..afb4d21 100644 --- a/src/value-history.cpp +++ b/src/value-history.cpp @@ -42,29 +42,34 @@ double ValueHistory::get_max_value() void ValueHistory::update(unsigned int max_samples, bool &new_value) { --waits_remaining; - + + double measurement; + + // Get a new measurement or reuse the last measurement. if (waits_remaining <= 0) { new_value = true; - monitor->measure(); + waits_remaining = wait_iterations; // Fetching new measurement - double measurement = monitor->value(); - - // Dealing with new max measurements - if (measurement > max_value) - { - max_value = measurement; - max_count = 1; - } - else if (measurement == max_value) - ++max_count; - - // Saving data and resetting waits - values.push_front(measurement); - waits_remaining = wait_iterations; + monitor->measure(); + measurement = monitor->value(); } - else + else { new_value = false; + measurement = values.at(0); + } + + // Dealing with new max measurements + if (measurement > max_value) + { + max_value = measurement; + max_count = 1; + } + else if (measurement == max_value) + ++max_count; + + // Saving data + values.push_front(measurement); /* Get rid of extra samples (there may be more than one if user changes * configuration */ -- 2.9.4