Comment 48 for bug 93847

Revision history for this message
Spudz (sunfish7) wrote :

System Monitor chews up to 20% of my CPU. It's really pretty I know, but ...this renders it really useless.

This is either caused by (1) the math-algorithm to smooth the graphs, or (2) the redrawing.

If (1), need to check if the entire curve is re-approximated each redraw. if it is, that's VERY BAD. Only the new point should be adjusted, thus: NewPoint = 0.2 * new_val + 0.8 * LastPoint, or something. That's called an IIR filter if anyone's interested.

If (2), I suggest
a) changing the readout to hospital cardiograph style. (reading moves from left to right, and wraps)
b) lower refresh rate to 5fps, draw a bunch of samples each time
c) if you _really_ want the whole thing to move, blank and repaint each point rather than blanking the area and redrawing

This would be fastest, and smooths:

const WIDTH 500
int val[WIDTH];
int x = -1;
float y = 0;

void plot_new_point(int newVal)
{
   x++;
   if (x > graphWidth)
      x = 0;

   float y_old = y;
   y = 0.8 * y_old + 0.2 * newVal;

   SetPixel( x, val [x], BACKGROUND_COLOR );
   val[x] = y;
   SetPixel( x, val [x], LINE_COLOR );
}

Sorry can't implement. 1) I'm a noob. 2) RSI. 3) ToDo list spans till xmas.

Sam/Ohmu