I've been spending some time with the code today, and the problem seems related and proportional to the "cycles" option.
Running braid from the command line:
$ ./braid [the default is 100 cycles]
braid: warning: only 4% idle over the last 10 secs (at 41.5 FPS)
braid: warning: only 6% idle over the last 10 secs (at 61.3 FPS)
braid: warning: blocked event processing for 22.1 secs!
braid: warning: only 2% idle over the last 32 secs (at 18.5 FPS)
$ ./braid -cycles 1000
braid: warning: only 4% idle over the last 10 secs (at 35.4 FPS)
braid: warning: only 3% idle over the last 10 secs (at 27.9 FPS)
braid: warning: only 2% idle over the last 10 secs (at 23.0 FPS)
braid: warning: only 3% idle over the last 10 secs (at 30.0 FPS)
braid: warning: blocked event processing for 97.9 secs!
braid: warning: only 0% idle over the last 108 secs (at 1.0 FPS)
But ...
$ ./braid -cycles 10 -- about 50% CPU
$ ./braid -cycles 1 -- about 25% CPU
The only thing that cycles appears to impact is how often draw_braid calls braid-erase() and init_braid, and I haven't had time to figure out why doing that more often results in lower CPU usage. Nor have I figured out why
I've been spending some time with the code today, and the problem seems related and proportional to the "cycles" option.
Running braid from the command line:
$ ./braid [the default is 100 cycles]
braid: warning: only 4% idle over the last 10 secs (at 41.5 FPS)
braid: warning: only 6% idle over the last 10 secs (at 61.3 FPS)
braid: warning: blocked event processing for 22.1 secs!
braid: warning: only 2% idle over the last 32 secs (at 18.5 FPS)
$ ./braid -cycles 1000
braid: warning: only 4% idle over the last 10 secs (at 35.4 FPS)
braid: warning: only 3% idle over the last 10 secs (at 27.9 FPS)
braid: warning: only 2% idle over the last 10 secs (at 23.0 FPS)
braid: warning: only 3% idle over the last 10 secs (at 30.0 FPS)
braid: warning: blocked event processing for 97.9 secs!
braid: warning: only 0% idle over the last 108 secs (at 1.0 FPS)
But ...
$ ./braid -cycles 10 -- about 50% CPU
$ ./braid -cycles 1 -- about 25% CPU
The only thing that cycles appears to impact is how often draw_braid calls braid-erase() and init_braid, and I haven't had time to figure out why doing that more often results in lower CPU usage. Nor have I figured out why
$ nice -n 15 ./helios
$ nice -n 15 ./braid -delay 10000 -cycles 2
exhibit totally different behavior, with the former (and every other screensaver) showing CPU consumption in nice, and the latter not.