[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