| Index: gclient_utils.py
|
| diff --git a/gclient_utils.py b/gclient_utils.py
|
| index d21ade51b0015943efcf310b674250911beeb155..9d14bd2554889e0d9bce345657990bca19b22b01 100644
|
| --- a/gclient_utils.py
|
| +++ b/gclient_utils.py
|
| @@ -285,6 +285,30 @@ def CheckCallAndFilterAndHeader(args, always=False, **kwargs):
|
| return CheckCallAndFilter(args, **kwargs)
|
|
|
|
|
| +class StdoutAutoFlush(object):
|
| + """Automatically flush after N seconds."""
|
| + def __init__(self, stdout, delay=10):
|
| + self.lock = threading.Lock()
|
| + self.stdout = stdout
|
| + self.delay = delay
|
| + self.last_flushed_at = time.time()
|
| + self.stdout.flush()
|
| +
|
| + def write(self, out):
|
| + """Thread-safe."""
|
| + self.stdout.write(out)
|
| + should_flush = False
|
| + with self.lock:
|
| + if (time.time() - self.last_flushed_at) > self.delay:
|
| + should_flush = True
|
| + self.last_flushed_at = time.time()
|
| + if should_flush:
|
| + self.stdout.flush()
|
| +
|
| + def flush(self):
|
| + self.stdout.flush()
|
| +
|
| +
|
| def CheckCallAndFilter(args, stdout=None, filter_fn=None,
|
| print_stdout=None, call_filter_on_first_line=False,
|
| **kwargs):
|
| @@ -308,7 +332,6 @@ def CheckCallAndFilter(args, stdout=None, filter_fn=None,
|
| **kwargs)
|
|
|
| # Do a flush of stdout before we begin reading from the subprocess's stdout
|
| - last_flushed_at = time.time()
|
| stdout.flush()
|
|
|
| # Also, we need to forward stdout to prevent weird re-ordering of output.
|
| @@ -329,12 +352,6 @@ def CheckCallAndFilter(args, stdout=None, filter_fn=None,
|
| else:
|
| filter_fn(in_line)
|
| in_line = ''
|
| - # Flush at least 10 seconds between line writes. We wait at least 10
|
| - # seconds to avoid overloading the reader that called us with output,
|
| - # which can slow busy readers down.
|
| - if (time.time() - last_flushed_at) > 10:
|
| - last_flushed_at = time.time()
|
| - stdout.flush()
|
| in_byte = kid.stdout.read(1)
|
| # Flush the rest of buffered output. This is only an issue with
|
| # stdout/stderr not ending with a \n.
|
|
|