From 30bf9bcbefcb5e2cea7d38f6547e22f0fd8c4280 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Mon, 29 May 2017 16:17:11 +0200 Subject: experimental UI: don't double track pending transports As the state tracker keeps track of which transports we still have to wait for, make the event handler just ask the state tracker. In this way, we also handle gracefully if the closing of a transport is reported more than once. Change-Id: I0e1959d827268319ec00541994314c9325ef2307 PiperOrigin-RevId: 157395608 --- .../build/lib/runtime/ExperimentalEventHandler.java | 21 +++++++++++++-------- .../build/lib/runtime/ExperimentalStateTracker.java | 4 ++++ 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'src') 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 62850557f5..aea47c8810 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 @@ -13,8 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.runtime; -import static com.google.devtools.build.lib.util.Preconditions.checkState; - import com.google.common.collect.ImmutableSet; import com.google.common.eventbus.Subscribe; import com.google.common.primitives.Bytes; @@ -25,6 +23,7 @@ import com.google.devtools.build.lib.actions.ActionStatusMessage; import com.google.devtools.build.lib.analysis.AnalysisPhaseCompleteEvent; import com.google.devtools.build.lib.analysis.NoBuildEvent; import com.google.devtools.build.lib.buildeventstream.AnnounceBuildEventTransportsEvent; +import com.google.devtools.build.lib.buildeventstream.BuildEventTransport; import com.google.devtools.build.lib.buildeventstream.BuildEventTransportClosedEvent; import com.google.devtools.build.lib.buildtool.buildevent.BuildCompleteEvent; import com.google.devtools.build.lib.buildtool.buildevent.BuildStartingEvent; @@ -92,7 +91,6 @@ public class ExperimentalEventHandler implements EventHandler { private int numLinesProgressBar; private boolean buildComplete; // Number of open build even protocol transports. - private int openBepTransports; private boolean progressBarNeedsRefresh; private Thread updateThread; private byte[] stdoutBuffer; @@ -445,7 +443,7 @@ public class ExperimentalEventHandler implements EventHandler { // After a build has completed, only stop updating the UI if there is no more BEP // upload happening. - if (openBepTransports == 0) { + if (stateTracker.pendingTransports() == 0) { buildComplete = true; stopUpdateThread(); flushStdOutStdErrBuffers(); @@ -555,17 +553,24 @@ public class ExperimentalEventHandler implements EventHandler { @Subscribe public synchronized void buildEventTransportsAnnounced(AnnounceBuildEventTransportsEvent event) { - openBepTransports += event.transports().size(); stateTracker.buildEventTransportsAnnounced(event); + if (debugAllEvents) { + String message = "Transports announced:"; + for (BuildEventTransport transport : event.transports()) { + message += " " + transport.name(); + } + this.handle(Event.info(null, message)); + } } @Subscribe public synchronized void buildEventTransportClosed(BuildEventTransportClosedEvent event) { - checkState(openBepTransports > 0); - openBepTransports--; stateTracker.buildEventTransportClosed(event); + if (debugAllEvents) { + this.handle(Event.info(null, "Transport " + event.transport().name() + " closed")); + } - if (openBepTransports == 0) { + if (stateTracker.pendingTransports() == 0) { stopUpdateThread(); flushStdOutStdErrBuffers(); ignoreRefreshLimitOnce(); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java index 51e67b77b3..ea6329d94e 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java @@ -502,6 +502,10 @@ class ExperimentalStateTracker { bepOpenTransports.remove(event.transport()); } + synchronized int pendingTransports() { + return bepOpenTransports.size(); + } + /*** * Predicate indicating whether the contents of the progress bar can change, if the * only thing that happens is that time passes; this is the case, e.g., if the progress -- cgit v1.2.3