profiling: replace '+' markup of nested lines with indentation
The display of nested lines for hg --profile was very non-obvious and made it
look like sort didn't work.
The '+' immediately before CallCount was not related to the CallCount and did
not mean plus in any integer sense.
The '+' before module looked like a part of the module name and not like ascii
art.
Instead we now indent the subordinate module names to clearly show the
structure.
merge: don't fiddle with name lookups or i18n in hot loops
We perform attribute dereferences and i18n lookups before looping.
merge: apply non-interactive working dir updates in parallel
This has a big effect on the performance of working dir updates.
Here are the results of update from null to the given rev in several
repos, on a Linux 3.2 system with 32 cores running ext4, with the progress
extension enabled.
repo rev plain parallel speedup
hg
7068089c95a2 0.9 0.3 3
mozilla-central
fe1600b22c77 42.8 7.7 5.5
linux-2.6
9ef4b770e069 31.4 4.9 6.4
worker: allow a function to be run in multiple worker processes
If we estimate that it will be worth the cost, we run the function in
multiple processes. Otherwise, we run it in-process.
Children report progress to the parent through a pipe.
Not yet implemented on Windows.
worker: estimate whether it's worth running a task in parallel
Not implemented for Windows yet.