contrib/perf.py
changeset 49438 44d4fd09982f
parent 49414 3c5d0f879404
child 49443 2896ed067d51
equal deleted inserted replaced
49437:a3ac3f1623dd 49438:44d4fd09982f
   923 
   923 
   924     timer(d)
   924     timer(d)
   925     fm.end()
   925     fm.end()
   926 
   926 
   927 
   927 
       
   928 @command(
       
   929     b'perf::delta-find',
       
   930     revlogopts + formatteropts,
       
   931     b'-c|-m|FILE REV',
       
   932 )
       
   933 def perf_delta_find(ui, repo, arg_1, arg_2=None, **opts):
       
   934     """benchmark the process of finding a valid delta for a revlog revision
       
   935 
       
   936     When a revlog receives a new revision (e.g. from a commit, or from an
       
   937     incoming bundle), it searches for a suitable delta-base to produce a delta.
       
   938     This perf command measures how much time we spend in this process. It
       
   939     operates on an already stored revision.
       
   940 
       
   941     See `hg help debug-delta-find` for another related command.
       
   942     """
       
   943     from mercurial import revlogutils
       
   944     import mercurial.revlogutils.deltas as deltautil
       
   945 
       
   946     opts = _byteskwargs(opts)
       
   947     if arg_2 is None:
       
   948         file_ = None
       
   949         rev = arg_1
       
   950     else:
       
   951         file_ = arg_1
       
   952         rev = arg_2
       
   953 
       
   954     repo = repo.unfiltered()
       
   955 
       
   956     timer, fm = gettimer(ui, opts)
       
   957 
       
   958     rev = int(rev)
       
   959 
       
   960     revlog = cmdutil.openrevlog(repo, b'perf::delta-find', file_, opts)
       
   961 
       
   962     deltacomputer = deltautil.deltacomputer(revlog)
       
   963 
       
   964     node = revlog.node(rev)
       
   965     p1r, p2r = revlog.parentrevs(rev)
       
   966     p1 = revlog.node(p1r)
       
   967     p2 = revlog.node(p2r)
       
   968     full_text = revlog.revision(rev)
       
   969     textlen = len(full_text)
       
   970     cachedelta = None
       
   971     flags = revlog.flags(rev)
       
   972 
       
   973     revinfo = revlogutils.revisioninfo(
       
   974         node,
       
   975         p1,
       
   976         p2,
       
   977         [full_text],  # btext
       
   978         textlen,
       
   979         cachedelta,
       
   980         flags,
       
   981     )
       
   982 
       
   983     # Note: we should probably purge the potential caches (like the full
       
   984     # manifest cache) between runs.
       
   985     def find_one():
       
   986         with revlog._datafp() as fh:
       
   987             deltacomputer.finddeltainfo(revinfo, fh, target_rev=rev)
       
   988 
       
   989     timer(find_one)
       
   990     fm.end()
       
   991 
       
   992 
   928 @command(b'perf::discovery|perfdiscovery', formatteropts, b'PATH')
   993 @command(b'perf::discovery|perfdiscovery', formatteropts, b'PATH')
   929 def perfdiscovery(ui, repo, path, **opts):
   994 def perfdiscovery(ui, repo, path, **opts):
   930     """benchmark discovery between local repo and the peer at given path"""
   995     """benchmark discovery between local repo and the peer at given path"""
   931     repos = [repo, None]
   996     repos = [repo, None]
   932     timer, fm = gettimer(ui, opts)
   997     timer, fm = gettimer(ui, opts)