contrib/perf.py
changeset 50671 b10c786b0145
parent 50455 714b63a707b7
child 50672 3ce370a00225
equal deleted inserted replaced
50670:5d84b1385f7f 50671:b10c786b0145
  1898 
  1898 
  1899     timer(d)
  1899     timer(d)
  1900     fm.end()
  1900     fm.end()
  1901 
  1901 
  1902 
  1902 
       
  1903 def _find_stream_generator(version):
       
  1904     """find the proper generator function for this stream version"""
       
  1905     import mercurial.streamclone
       
  1906 
       
  1907     available = {}
       
  1908 
       
  1909     # try to fetch a v1 generator
       
  1910     generatev1 = getattr(mercurial.streamclone, "generatev1", None)
       
  1911     if generatev1 is not None:
       
  1912 
       
  1913         def generate(repo):
       
  1914             entries, bytes, data = generatev2(repo, None, None, True)
       
  1915             return data
       
  1916 
       
  1917         available[b'v1'] = generatev1
       
  1918     # try to fetch a v2 generator
       
  1919     generatev2 = getattr(mercurial.streamclone, "generatev2", None)
       
  1920     if generatev2 is not None:
       
  1921 
       
  1922         def generate(repo):
       
  1923             entries, bytes, data = generatev2(repo, None, None, True)
       
  1924             return data
       
  1925 
       
  1926         available[b'v2'] = generate
       
  1927     # resolve the request
       
  1928     if version == b"latest":
       
  1929         latest_key = max(available)
       
  1930         return available[latest_key]
       
  1931     elif version in available:
       
  1932         return available[version]
       
  1933     else:
       
  1934         msg = b"unkown or unavailable version: %s"
       
  1935         msg %= version
       
  1936         hint = b"available versions: %s"
       
  1937         hint %= b', '.join(sorted(available))
       
  1938         raise error.Abort(msg, hint=hint)
       
  1939 
       
  1940 
  1903 @command(
  1941 @command(
  1904     b'perf::stream-locked-section',
  1942     b'perf::stream-locked-section',
  1905     [
  1943     [
  1906         (
  1944         (
  1907             b'',
  1945             b'',
  1912     ]
  1950     ]
  1913     + formatteropts,
  1951     + formatteropts,
  1914 )
  1952 )
  1915 def perf_stream_clone_scan(ui, repo, stream_version, **opts):
  1953 def perf_stream_clone_scan(ui, repo, stream_version, **opts):
  1916     """benchmark the initial, repo-locked, section of a stream-clone"""
  1954     """benchmark the initial, repo-locked, section of a stream-clone"""
  1917     import mercurial.streamclone
       
  1918 
       
  1919     generatev1 = mercurial.streamclone.generatev1
       
  1920     generatev2 = mercurial.streamclone.generatev2
       
  1921 
  1955 
  1922     opts = _byteskwargs(opts)
  1956     opts = _byteskwargs(opts)
  1923     timer, fm = gettimer(ui, opts)
  1957     timer, fm = gettimer(ui, opts)
  1924 
  1958 
  1925     # deletion of the generator may trigger some cleanup that we do not want to
  1959     # deletion of the generator may trigger some cleanup that we do not want to
  1927     result_holder = [None]
  1961     result_holder = [None]
  1928 
  1962 
  1929     def setupone():
  1963     def setupone():
  1930         result_holder[0] = None
  1964         result_holder[0] = None
  1931 
  1965 
  1932     def runone_v1():
  1966     generate = _find_stream_generator(stream_version)
       
  1967 
       
  1968     def runone():
  1933         # the lock is held for the duration the initialisation
  1969         # the lock is held for the duration the initialisation
  1934         result_holder[0] = generatev1(repo)
  1970         result_holder[0] = generate(repo)
  1935 
       
  1936     def runone_v2():
       
  1937         # the lock is held for the duration the initialisation
       
  1938         result_holder[0] = generatev2(repo, None, None, True)
       
  1939 
       
  1940     if stream_version == b'latest':
       
  1941         runone = runone_v2
       
  1942     elif stream_version == b'v2':
       
  1943         runone = runone_v2
       
  1944     elif stream_version == b'v1':
       
  1945         runone = runone_v1
       
  1946     else:
       
  1947         msg = b'unknown stream version: "%s"' % stream_version
       
  1948         raise error.Abort(msg)
       
  1949 
  1971 
  1950     timer(runone, setup=setupone, title=b"load")
  1972     timer(runone, setup=setupone, title=b"load")
  1951     fm.end()
  1973     fm.end()
  1952 
  1974 
  1953 
  1975