I'm pleased to announce the immediate availability of 2 new features on
hg.mozilla.org: faster blame rendering and a mozilla-central repo with CVS
history. You can find these features at:

* https://hg.mozilla.org/experimental/mozilla-central-gd
* https://hg.mozilla.org/experimental/mozilla-central-cvs

experimental/mozilla-central-gd is a straight clone of mozilla-central with
more efficient Mercurial storage and the fast blame feature enabled.

experimental/mozilla-central-cvs contains CVS history. It should update
within seconds of pushes to mozilla-central. It also has fast blame
enabled. Note: there is no guarantee the commit hashes on this repo are
stable. Please don't rely on that!

If you encounter any issues or have feature requests, please file bugs in
the hg.mozilla.org bugzilla component or track me down.

Also, I'd love to hear feedback if these features are beneficial to you.

Read on for low-level details.

The mozilla-central-cvs repo was created by converting the CVS history from
the gecko-dev Git repo to Mercurial. Then, all commits from mozilla-central
were essentially replayed on top of that history. This was the easiest way
to perform a conversion. This does preserve all the oddities with both
histories. If I had infinite time, I'd do a "proper" conversion that prunes
badness and does things like rename detection. I'd like to leave the door
open to doing this in the future: that's partially why "experimental" is in
the URL. Bug 1265493 tracks these remaining improvements.

For changesets converted from mozilla-central, the HTML output will render
a link to the original mozilla-central changeset. See the "converted from"
line on e.g.
https://hg.mozilla.org/experimental/mozilla-central-cvs/rev/ab117d946959.

The faster blame rendering comes courtesy of the "fastannotate" extension
available from https://bitbucket.org/facebook/hg-experimental/. The faster
blame rendering is, well, fast. We can see this clearly when invoking the
`blame` CLI command against the gecko-dev Git and mozilla-central-cvs
Mercurial repos using Git 2.11.0 and Mercurial 4.0:

dom/base/nsDocument.cpp
git blame: 8.6s
hg blame: 8.6s
hg fastannotate: 0.4s

layout/base/nsCSSFrameConstructor.cpp
git blame: 17.7s
hg blame: 11.3s
hg fastannotate: 0.4s

While vanilla Mercurial was already faster or the same speed as Git,
Mercurial with fastannotate makes things effectively instantaneous - up to
44x faster than Git!

A wrinkle in this awesome performance is that it isn't as obvious in the
web interface for large files. This is because a) the server spends a lot
of time in the templating mechanism generating HTML b) I think the emitted
HTML is causing browsers to behave a bit sub-optimally (Searchfox seems to
behave much better in this area). I believe both these issues can be
improved in Mercurial 4.1. Although a web performance guru might have to
give suggestions to optimize HTML/layout. (Please get in touch!)

Anyway, if you load a large blame page like
https://hg.mozilla.org/experimental/mozilla-central-cvs/annotate/tip/layout/base/nsCSSFrameConstructor.cpp
the output will start streaming immediately, but it could take a few
seconds for everything to appear. Still, the overall page will load
significantly faster than before because the core blame algorithm is
running faster. e.g. the HTTP request for nsCSSFrameConstructor.cpp serves
in 2.4s vs 23.6s from my machine. While not as fast as the 28x speedup to
the core algorithm, a 10x speedup is definitely noticeable :)
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to