Performance profiling against git history
The horizontal axis is git commits and the vertical axis is throughput, with 0 pixels/second at the bottom.

In the last half year unsharp mask, which exercises many GEGL sub-systems and code paths, has had more than a 300% performance boost - some related to gaussian blur and thus shared with dropshadow and shadows-highlights. The time span includes the enabling of multiple threads by default, and many improvements and temporary regressions seen are due to changes in locking/parallelization code. Rotation and most other transformation based ops have had significant performance improvements through sampling pattern adaptive samplers in GEGL - as well as micro optimizations of the code paths for fetching pixels.

The graph was created by one of the sometimes dusty tools in the GEGL source tree that is worth revisiting on at least an annual basis. Along with tests the perf folder contains a shell script, a ruby script and a couple of extra Makefiles providing a toolset for building, caching and performance profiling multiple installed binary versions of GEGL. Note that all the profiling for this graph is using git master of babl, thus concealing the performance boosts seen from babl improvements. The produced graphs tracking performance improvements and help find unintended regressions. It is nice to be able to re-run tests without having to do a rebuild the git versions being tests; since it permits fast iterations on the tests - as well as repeated runs.

The joblist used for the image in this post is ~100 possibly performance related commits as well as every single of the last 20 commits - skipping more than 95% of the commits in the period covered. When something interesting is found, one can verify that the built and tested commit is the point of change by building and testing the commits immediately before and after, followed by more builds until the succesful one is found. The PDF version is also more useful than a PNG since it permits selecting git hashes for copy and paste to the commandline.