diff options
author | 2017-05-29 16:17:11 +0200 | |
---|---|---|
committer | 2017-05-29 16:42:51 +0200 | |
commit | 30bf9bcbefcb5e2cea7d38f6547e22f0fd8c4280 (patch) | |
tree | 612ee7442da09d6581251c6e89917adb68bc565e /src | |
parent | e1e0f5d8c3e59fa7bca8f4aa1adde7620f89b304 (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java | 21 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java | 4 |
2 files changed, 17 insertions, 8 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 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 |