aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2017-05-29 16:17:11 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-05-29 16:42:51 +0200
commit30bf9bcbefcb5e2cea7d38f6547e22f0fd8c4280 (patch)
tree612ee7442da09d6581251c6e89917adb68bc565e /src
parente1e0f5d8c3e59fa7bca8f4aa1adde7620f89b304 (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.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java4
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