More efficient string concatenation combined with a lookup table for
JSON encodings leads to 2% improvement for "export" performance test,
3% improvement for "import" performance test.
- Thanks to David Patrick.
- The 'rc:' argument now means 'use all defaults', which assumes
'data.location=~/.task', so this will not work for anyone using a different
location.
For lack of being able to reproduce the problem, this is a "fix by
guessing at the root cause" commit. Don't do this at home.
FreeBSD was showing a 100.04% test suite run because the output of
"test/problems --summary" was intertwined with TAP output.
The only somewhat sane way for this to happen that does not involve
magic is that Python's sys.stdout buffer is not flushed before calling
subprocess.call(), which uses the raw file descriptors.
A quick check of the sources seems to support this theory.
- While duration formats are still not configurable, the break points for
formatting units is shifted to be a little more predictable.
- Thanks to Black Ops testing.
- The 'age' column regained the ability to show negative durations.
- The 'countdown' and 'remaining' continue to show only positive values, by
design.
- Thanks to Jeremy John Reeder.
- Thanks to Roman Golovin.
- Calls like 'context.columns[name]' autovivify the key 'name' with a default
ctor value, which ends up polluting the context.columns map with every unique
attribute name, which is a lot of 'annotation_nnnnnnnnnn' attributes.
Improves "load" time for all performance tests that load data by ~20%.
- "next" down 15% total
- "list" down 7% total
- "all" down 3% total
- "add" down 15% total
- "export" down 8% total
- "import" down 6% total
fseek() in File::append() was invalidating the file buffer for each call
to append(). Better handling improves "import" performance test by 9%,
45% in "commit", on a system with a spinning disk.
This performance problem affects all operations where
{pending,completed}.data are rewritten. During normal operation a
garbage collection can be enough to trigger it. On storage with high
latency, e.g. networked, this previously took 20 seconds and more.