[PATCH 2 of 2 V2] perf: benchmark command for revlog indexes
Yuya Nishihara
yuya at tcha.org
Mon May 29 09:26:13 EDT 2017
On Sun, 28 May 2017 11:13:22 -0700, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com>
> # Date 1495995190 25200
> # Sun May 28 11:13:10 2017 -0700
> # Node ID f21925c52da67931702838d0579f157ce21939bb
> # Parent 1ca1ef5d942aa405bec4ae74cbcf3155a5a4033f
> perf: benchmark command for revlog indexes
Queued, thanks.
> @@ -61,6 +63,10 @@ try:
> from mercurial import scmutil # since 1.9 (or 8b252e826c68)
> except ImportError:
> pass
> +try:
> + from mercurial import pycompat # since 3.8 (or 6041fb8f2da8)
> +except ImportError:
> + pass
pycompat isn't used, so removed.
> + at command('perfrevlogindex', revlogopts + formatteropts,
> + '-c|-m|FILE')
> +def perfrevlogindex(ui, repo, file_=None, **opts):
> + """Benchmark operations against a revlog index.
> +
> + This tests constructing a revlog instance, reading index data,
> + parsing index data, and performing various operations related to
> + index data.
> + """
> +
> + rl = cmdutil.openrevlog(repo, 'perfrevlogindex', file_, opts)
> +
> + opener = getattr(rl, 'opener') # trick linter
> + indexfile = rl.indexfile
> + data = opener.read(indexfile)
> +
> + header = struct.unpack('>I', data[0:4])[0]
> + version = header & 0xFFFF
> + if version == 1:
> + revlogio = revlog.revlogio()
> + inline = header & (1 << 16)
> + else:
> + raise error.Abort(_('unsupported revlog version: %d') % version)
dropped _() since it seems perf.py tries not to depend on i18n.
> + rllen = len(rl)
> +
> + node0 = rl.node(0)
> + node25 = rl.node(rllen // 4)
> + node50 = rl.node(rllen // 2)
> + node75 = rl.node(rllen // 4 * 3)
Nit: '(rllen * 3) // 4' would be more accurate, but I don't care much about it.
> + node100 = rl.node(rllen - 1)
More information about the Mercurial-devel
mailing list