aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2016-03-04 13:11:59 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-03-04 16:16:50 +0000
commit738f7f674271e0c366976a8f8a635784760d4e2b (patch)
tree1626ed5ac2e3dce3ac2ba16073213f364ec5ff8b /src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java
parentd2bf690b5d69e25945e85e067a9a2a8c2b351d50 (diff)
experimental UI: merge simultaneous progress bar updates
Events may reach the UI over the event bus simultaneously or with very small time difference. Updating the UI on the terminal, however is an expensive operation. So update the UI only once for simultaneous events. -- Change-Id: I3e6881f18b37626f6be3ad7b97043b42773812f3 Reviewed-on: https://bazel-review.googlesource.com/#/c/3047 MOS_MIGRATED_REVID=116352143
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java
index 5b38f0f1f0..6c5dd0e954 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java
@@ -44,6 +44,7 @@ public class ExperimentalEventHandler extends BlazeCommandEventHandler {
private final ExperimentalStateTracker stateTracker;
private int numLinesProgressBar;
private boolean buildComplete;
+ private boolean progressBarNeedsRefresh;
public final int terminalWidth;
@@ -170,11 +171,19 @@ public class ExperimentalEventHandler extends BlazeCommandEventHandler {
refresh();
}
- private synchronized void refresh() {
+ private void refresh() {
+ progressBarNeedsRefresh = true;
+ doRefresh();
+ }
+
+ private synchronized void doRefresh() {
try {
- clearProgressBar();
- addProgressBar();
- terminal.flush();
+ if (progressBarNeedsRefresh) {
+ progressBarNeedsRefresh = false;
+ clearProgressBar();
+ addProgressBar();
+ terminal.flush();
+ }
} catch (IOException e) {
LOG.warning("IO Error writing to output stream: " + e);
}