Mercurial > hg
view tests/mocktime.py @ 39560:84bf6ded9317
wireprotoframing: buffer emitted data to reduce frame count
An upcoming commit introduces a wire protocol command that can emit
hundreds of thousands of small objects. Without a buffering layer,
we would emit a single, small frame for every object. Performance
profiling revealed this to be a source of significant overhead for
both client and server.
This commit introduces a very crude buffering layer so that we emit
fewer, bigger frames in such a scenario. This code will likely get
rewritten in the future to be part of the streams API, as we'll
need a similar strategy for compressing data. I don't want to think
about it too much at the moment though.
server
before: user 32.500+0.000 sys 1.160+0.000
after: user 20.230+0.010 sys 0.180+0.000
client
before: user 133.400+0.000 sys 93.120+0.000
after: user 68.370+0.000 sys 32.950+0.000
This appears to indicate we have significant overhead in the frame
processing code on both client and server. It might be worth profiling
that at some point...
Differential Revision: https://phab.mercurial-scm.org/D4473
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 29 Aug 2018 16:43:17 -0700 |
parents | 12b355964de8 |
children | 2372284d9457 |
line wrap: on
line source
from __future__ import absolute_import import os import time class mocktime(object): def __init__(self, increment): self.time = 0 self.increment = [float(s) for s in increment.split()] self.pos = 0 def __call__(self): self.time += self.increment[self.pos % len(self.increment)] self.pos += 1 return self.time def uisetup(ui): time.time = mocktime(os.environ.get('MOCKTIME', '0.1'))