Mercurial > hg
changeset 17557:6d97dd630d79
wireproto: bypass filechunkiter for small files when streaming
Merely creating and using a generator has a measurable impact,
particularly since the common case for stream_out is generators that
yield just once. Avoiding generators improves stream_out performance
by about 7%.
author | Bryan O'Sullivan <bryano@fb.com> |
---|---|
date | Fri, 14 Sep 2012 12:05:37 -0700 |
parents | 39c6e349dfff |
children | 380a89413403 |
files | mercurial/wireproto.py tests/test-check-code-hg.t |
diffstat | 2 files changed, 12 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/wireproto.py Fri Sep 14 12:05:12 2012 -0700 +++ b/mercurial/wireproto.py Fri Sep 14 12:05:37 2012 -0700 @@ -555,8 +555,11 @@ repo.ui.debug('sending %s (%d bytes)\n' % (name, size)) # partially encode name over the wire for backwards compat yield '%s\0%d\n' % (store.encodedir(name), size) - for chunk in util.filechunkiter(sopener(name), limit=size): - yield chunk + if size <= 65536: + yield sopener(name).read(size) + else: + for chunk in util.filechunkiter(sopener(name), limit=size): + yield chunk finally: sopener.mustaudit = oldaudit
--- a/tests/test-check-code-hg.t Fri Sep 14 12:05:12 2012 -0700 +++ b/tests/test-check-code-hg.t Fri Sep 14 12:05:37 2012 -0700 @@ -6,6 +6,10 @@ > exit 80 > fi $ hg manifest | xargs "$check_code" || echo 'FAILURE IS NOT AN OPTION!!!' + mercurial/wireproto.py:560: + > yield sopener(name).read(size) + use opener.read() instead + FAILURE IS NOT AN OPTION!!! $ hg manifest | xargs "$check_code" --warnings --nolineno --per-file=0 || true hgext/convert/cvsps.py:0: @@ -159,6 +163,9 @@ mercurial/commands.py:0: > ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no')) warning: unwrapped ui message + mercurial/wireproto.py:0: + > yield sopener(name).read(size) + use opener.read() instead tests/autodiff.py:0: > ui.write('data lost for: %s\n' % fn) warning: unwrapped ui message