Testing is not an Option!

I released Gnumeric 1.7.3
only to discover that a little too much editing killed evaluation in
very common situations. Bad me! 1.7.4 is out.

That is not going to happen again.

I sat down and spent a few hours automating most of our tests. Then
I added a valgrind run and the beginning of tests of our importers.
It is part of “make distcheck”, so testing is now mandatory and automatic.

The workhorse of these tests is ssconvert, our handy little command-line utility that converts from one format to another.
By forcing evaluation of all cells between import and export,
we end up exercising quite a large part of the core. As well
as a few importers and exporters. No GUI tests are currently performed, but I suspect we can add that
too somehow.

Gnome Terminal

Until recently I have been using xterm and twm. Call me a stone-age
throw-back if you like, but those two are fast and lean.

But I am giving gnome-terminal and metacity a spin now. Metacity
suffers somewhat from click-to-focus, even if you set
it to focus-follows-mouse, but that is a story for another day.

Today it is gnome-terminal gripe time. Ok, so it is actually not
too bad, but it feels slow. Starting the first terminal window,
for example, takes a few seconds. Seconds! I want my window to
show up in less than .2 seconds.

A bit of stracing reveals the cause. It is dlopen-ing a zillion modules related to character support.
That is used to populate a, I estimate, rarely used menu. In my humble opinion, the penalty for this kind of thing should not be taken on startup, but when the rarely-used feature is activated. Or in the background while I type away happily. Luckily this does not seem
too hard to fix.

On top of this, Fontconfig is doing a whole lot of work on startup.
It does that for other GTK+ based programs too, so I doubt the
applications are to blame. So what does it do?

  • Stats ~200 directories all over the place.
  • Feels the need to do things three times:
    access("/etc/fonts/suse-hinting.conf", R_OK) = 0
    stat64("/etc/fonts/suse-hinting.conf", {st_mode=S_IFREG|0644, st_size=6575, ...}) = 0
    open("/etc/fonts/suse-hinting.conf", O_RDONLY) = 18
    

    Are you there? Are you there? Please open! This kind of behaviour
    is fairly cheap on a local file system, but not necessarily so on
    a remote one. And it is wrong: the file could have changed twice between the three calls.

  • Zig-zag reading files:
    read(17, "     fd9 78563412    1    4    4"..., 255) = 255
    lseek(17, -136, SEEK_CUR)               = 158
    read(17, "/usr/X11R6/lib/X11/fonts/CID/us"..., 4109) = 3938
    lseek(17, -3909, SEEK_CUR)              = 187
    read(17, "/usr/X11R6/lib/X11/fonts/URW/us"..., 4109) = 3909
    lseek(17, -3880, SEEK_CUR)              = 216
    read(17, "/usr/X11R6/lib/X11/fonts/uni/us"..., 4109) = 3880
    lseek(17, -3851, SEEK_CUR)              = 245
    

    Back-and-forth over the same area again and again. Short of timing
    system call overhead I do not see what it is doing.

I am also having problems with focus in the terminal. I am not entirely sure how I manage, but
somehow the focus ends up on one of the tabs where it has no business being.