The system load monitor displays green hint lines at every 100 units once
load average rises above 100.
Previously, the vertical position of these lines was computed before
each and every pixel was drawn. But since the horizontal position
isn't needed for this computation, we move it up a level to the
outer for loop.
Previously, we looped through the history and added 100 whenever we found
a larger value. This has a number of problems. In particular,
* We get a maximum possible value of 5500 (100 * the number of values in
the history). It is certainly possible to have a system load north of
this on modern systems.
* If the system load in history were to jump by more than 100 in a single
step, then we wouldn't be adding enough. For example, suppose the
system load in history is 175, and our height was previously computed
to be 200. Suppose the next value in history is 320. We would add
100 to get a new height of 300, which isn't sufficient to display the
320.
The fix is simple -- replace the if statement with a while loop, i.e.,
continue adding 100 until we get a height that fits our value.
This patch includes the library wmgeneral. The wmgeneral library
is used in a lot of dockapps:
$ find . -name wmgeneral
./wmkeys/wmgeneral
./wmtime/wmgeneral
./wmtz/wmgeneral
./wmsm.app/wmgeneral
./wmcpufreq/wmgeneral
./wmtv/src/wmgeneral
./wmSMPmon/wmgeneral
./wmckgmail/wmgeneral
./wmifs/wmgeneral
./wmbiff/wmgeneral
./wmfsm/wmgeneral
./wmsun/wmgeneral
./wmmon/wmgeneral
./wmitime/wmgeneral
./wmppp.app/wmgeneral
So, any change in the wmgeneral needs change a lot of dockapps.
I used the wmmon dockapp to move the wmgeneral and then I adjust the
wmmon to use the library. The library must be installed in the system
to build wmmon (wmmon uses the .h files) and is needed to run wmmon
(wmmon uses the libwmgeneral.so shared library).
I did not include any Changelog/README/... file to announce the change
in the libwmgeneral folder.
Signed-off-by: Rodolfo García Peñas (kix) <kix@kix.es>
In particular, we can specify the offsets from the right and bottom of the
screen using '-', e.g., '-geometry -64-64' places the dockapp in the lower
right corner of the screen.
This fixes "(portability) scanf without field width limits can crash with
huge input data on some versions of libc" warning from cppcheck.
We choose 10 as the field width limit as it is the number of characters in
2^31-1, the largest int.
Note that this was a fork of the earlier 1998-05-02 version and didn't
contain the later changes. Therefore we merge the best of both versions.
wmtime had some additional unnecessary dummy variables, so we use the wmmon
version.
Previously, if we attempted to build using C99 or later, we got "inline
function declared but never defined" warnings and eventual "undefined
reference" errors. As a result, it fails to build from source using gcc5.
However, if we move the definitions to list.h and add "extern inline"
declarations to list.c, which does compile using C99 and later, then it no
longer compiles using gnu90, the default for gcc4.
To avoid this mess, we remove the inline keywords altogether.
Note that this fixes Debian bugs for wmifs [1], wmppp.app [2], and
wmtime [3].
[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778170
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778172
[3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778174
- When executing a command, control flow would fall through to the
display cycle code, changing the display.
- When display cycling was prevented by the user (via -l), command
execution was also disabled.
Added -b flag to include buffers and cache in total memory usage.
Added global show_buffers, -b parsing code, associated logic in
update_stat_mem(), and usage information.
wmmon.1
Added -b documentation.
TODO: Still need to fix dependencies.
wmmon.c:
Updated version string to 1.2b2 (forgot this for 1.2b1).
Fixed compiler warnings: added error checking for filesystem calls
and commented out some preprocessor/C code that was apparently used
to hardcode test cases.
TODO: remove completely soon if no ill effect.
wmmon/CHANGES:
Updated for 1.2b1.
wmmon/Makefile:
Added debug build with -g3; default build with -O3. Note:
This makefile isn't perfect. You must "make clean" when switching
between "make" and "make debug" otherwise objects won't compile.
I'm sure it's a simple dependency issue, but I am not an expert with
Makefiles. I intend to fix this, but it's a low priority.
wmmon/wmmon/wmmon.c:
Updated changelog. Added #define HISTORY_ENTRIES to replace hardcoded
values.
DrawStats_io():
Removed static variable global_io_scale. Replaced with a local
variable. This should improve graphing - scale was growing, but
never shrinking, meaning as time passed, graphed values were
downscaled and not displayed.
Fixed rounding errors caused by use of integer types which were
causing very small values not to appear on graph. Added code to
round very low values up, so they will appear on meter and graph.
We are making a reasonable compromise between readability and
accuracy. Side effect is that small peaks (greater than 0 but less
than our rounded-up tiny values) will actually appear as dips
instead of peaks. I feel this is acceptable, since it still conveys
an impression of "jitter" to the user. Fixing this would have
involved further modifying the data before we graph it, which would
defeat the purpose of improving accuracy.
Tweaked load bar scaling algorithm for reabality and sensitivity.
update_stat_io():
Added a "stale" timeout for static long maxdiskio (determines
scaling of load bar). New behaviour is that every couple of minutes
we discard our saved peak value and resample. This prevents an
anomalously huge I/O spike from making more typical values fail to
trigger the load bar for the rest of the app's lifetime. Side
effect will be that every couple of minutes, we will get an
anomalous spike in the load bar as it recalibrates. This anomaly
only affects the bar, not the graph.
getWidth():
Fixed integer rounding issue similar to that in DrawStats_io().
Added similar rounding code to round up very small values so we
don't have the illusion of an idle system following a huge spike.