From 7e1a7e0fda35e0a9812c3a40743f62476719c168 Mon Sep 17 00:00:00 2001 From: Gavin Mak Date: Mon, 12 Aug 2024 22:18:52 +0000 Subject: [PATCH] Show message every 30s for long running presubmits Slow presubmits like CheckUnwantedDependencies can often take over 30s to run. Print a "still running" message so users don't think something hung. Bug: b/358457858 Change-Id: I47f5589af43d8fb0f384e6f7c633e9d0addd568a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/5782588 Commit-Queue: Gavin Mak Reviewed-by: Scott Lee --- presubmit_support.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/presubmit_support.py b/presubmit_support.py index ec44bdd88..cbdd9d2a5 100755 --- a/presubmit_support.py +++ b/presubmit_support.py @@ -1817,6 +1817,19 @@ class PresubmitExecuter(object): the result of the presubmit function call. """ start_time = time_time() + + def _progress_loop(event): + while not event.is_set(): + if event.wait(timeout=30): + return + sys.stdout.write(f'Still running {function_name} after ' + f'{int(time_time() - start_time)}s...\n') + + event = threading.Event() + event_thread = threading.Thread(target=_progress_loop, args=(event,)) + event_thread.daemon = True + event_thread.start() + try: result = eval(function_name + '(*__args)', context) self._check_result_type(result) @@ -1827,6 +1840,9 @@ class PresubmitExecuter(object): 'Evaluation of %s failed: %s, %s' % (function_name, e_value, traceback.format_exc())) ] + finally: + event.set() + event_thread.join() elapsed_time = time_time() - start_time if elapsed_time > 10.0: