aboutsummaryrefslogtreecommitdiff
path: root/pw_build/py/pw_build/project_builder_context.py
diff options
context:
space:
mode:
Diffstat (limited to 'pw_build/py/pw_build/project_builder_context.py')
-rw-r--r--pw_build/py/pw_build/project_builder_context.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/pw_build/py/pw_build/project_builder_context.py b/pw_build/py/pw_build/project_builder_context.py
index f45942351..d99362911 100644
--- a/pw_build/py/pw_build/project_builder_context.py
+++ b/pw_build/py/pw_build/project_builder_context.py
@@ -22,6 +22,7 @@ from enum import Enum
import logging
import os
import subprocess
+import time
from typing import Callable, Dict, List, Optional, NoReturn, TYPE_CHECKING
from prompt_toolkit.formatted_text import (
@@ -154,6 +155,9 @@ class ProjectBuilderContext: # pylint: disable=too-many-instance-attributes,too
formatters.Text(' '),
]
+ self._progress_bar_refresh_interval: float = 0.1 # 10 FPS
+ self._last_progress_bar_redraw_time: float = 0.0
+
self._enter_callback: Optional[Callable] = None
key_bindings = KeyBindings()
@@ -183,6 +187,12 @@ class ProjectBuilderContext: # pylint: disable=too-many-instance-attributes,too
def using_progress_bars(self) -> bool:
return bool(self.progress_bar) or self.using_fullscreen
+ @property
+ def log_build_steps(self) -> bool:
+ if self.project_builder:
+ return self.project_builder.log_build_steps
+ return False
+
def interrupted(self) -> bool:
return self.ctrl_c_pressed or self.restart_flag
@@ -221,15 +231,28 @@ class ProjectBuilderContext: # pylint: disable=too-many-instance-attributes,too
def clear_progress_scrollback(self) -> None:
if not self.progress_bar:
return
- self.progress_bar._app_loop.call_soon_threadsafe( # pylint: disable=protected-access
- self.progress_bar.app.renderer.clear
- )
+ if (
+ self.progress_bar.app.is_running
+ and self.progress_bar.app.loop is not None
+ ):
+ self.progress_bar.app.loop.call_soon_threadsafe(
+ self.progress_bar.app.renderer.clear
+ )
def redraw_progress(self) -> None:
if not self.progress_bar:
return
if hasattr(self.progress_bar, 'app'):
- self.progress_bar.invalidate()
+ redraw_time = time.time()
+ # Has enough time passed since last redraw?
+ if redraw_time > (
+ self._last_progress_bar_redraw_time
+ + self._progress_bar_refresh_interval
+ ):
+ # Update last redraw time
+ self._last_progress_bar_redraw_time = redraw_time
+ # Trigger Prompt Toolkit UI redraw.
+ self.progress_bar.invalidate()
def get_title_style(self) -> str:
if self.restart_flag: