aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2016-04-07 13:23:48 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-04-07 17:02:46 +0000
commit2c94a385bfcdec0ba0f43147b686fb04031f5051 (patch)
tree9da72d8584c4548d2a9982f939371f5654185034 /src
parent3454dd56f237b01b30c2ab7b0ab130426a0e14e7 (diff)
experimental UI: use LoadingProgressReceiver
Subscribe to the LoadingPhaseStartedEvent to get the LoadingProgressReceiver; use it to provide information about the loading progress. As this event will not be raised by the LegacyLoadingPhaseRunner, do not depend on this event and still produce a sensible status bar if it is never raised. -- Change-Id: I1db24ceaf7de4fc42d00b02f470066cb38c877b4 Reviewed-on: https://bazel-review.googlesource.com/#/c/3270 MOS_MIGRATED_REVID=119261675
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java23
-rwxr-xr-xsrc/test/shell/integration/experimental_ui_test.sh9
3 files changed, 38 insertions, 1 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 dc488bd6e0..cfa284f7d9 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
@@ -24,6 +24,7 @@ import com.google.devtools.build.lib.buildtool.buildevent.ExecutionProgressRecei
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.pkgcache.LoadingPhaseCompleteEvent;
+import com.google.devtools.build.lib.skyframe.LoadingPhaseStartedEvent;
import com.google.devtools.build.lib.util.Clock;
import com.google.devtools.build.lib.util.io.AnsiTerminal;
import com.google.devtools.build.lib.util.io.LineCountingAnsiTerminalWriter;
@@ -150,6 +151,12 @@ public class ExperimentalEventHandler extends BlazeCommandEventHandler {
}
@Subscribe
+ public void loadingStarted(LoadingPhaseStartedEvent event) {
+ stateTracker.loadingStarted(event);
+ refresh();
+ }
+
+ @Subscribe
public void loadingComplete(LoadingPhaseCompleteEvent event) {
stateTracker.loadingComplete(event);
refresh();
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 0764d53778..bddd3c086e 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
@@ -22,6 +22,8 @@ import com.google.devtools.build.lib.buildtool.buildevent.BuildCompleteEvent;
import com.google.devtools.build.lib.buildtool.buildevent.BuildStartingEvent;
import com.google.devtools.build.lib.buildtool.buildevent.ExecutionProgressReceiverAvailableEvent;
import com.google.devtools.build.lib.pkgcache.LoadingPhaseCompleteEvent;
+import com.google.devtools.build.lib.skyframe.LoadingPhaseStartedEvent;
+import com.google.devtools.build.lib.skyframe.LoadingProgressReceiver;
import com.google.devtools.build.lib.util.Clock;
import com.google.devtools.build.lib.util.io.AnsiTerminalWriter;
@@ -54,6 +56,7 @@ class ExperimentalStateTracker {
private boolean ok;
private ExecutionProgressReceiver executionProgressReceiver;
+ private LoadingProgressReceiver loadingProgressReceiver;
ExperimentalStateTracker(Clock clock) {
this.runningActions = new ArrayDeque<>();
@@ -68,7 +71,13 @@ class ExperimentalStateTracker {
additionalMessage = "";
}
+ void loadingStarted(LoadingPhaseStartedEvent event) {
+ status = null;
+ loadingProgressReceiver = event.getLoadingProgressReceiver();
+ }
+
void loadingComplete(LoadingPhaseCompleteEvent event) {
+ loadingProgressReceiver = null;
int count = event.getTargets().size();
status = "Analysing";
additionalMessage = "" + count + " targets";
@@ -159,6 +168,12 @@ class ExperimentalStateTracker {
if (runningActions.size() >= 1) {
return true;
}
+ if (loadingProgressReceiver != null) {
+ // This is kind-of a hack: since the event handler does not get informed about updates
+ // in the loading phase, indicate that the progress bar might change even though no
+ // explicit update event is known to the event handler.
+ return true;
+ }
return false;
}
@@ -172,6 +187,14 @@ class ExperimentalStateTracker {
terminalWriter.append(status + ":").normal().append(" " + additionalMessage);
return;
}
+ if (loadingProgressReceiver != null) {
+ terminalWriter
+ .okStatus()
+ .append("Loading:")
+ .normal()
+ .append(" " + loadingProgressReceiver.progressState());
+ return;
+ }
if (executionProgressReceiver != null) {
terminalWriter.okStatus().append(executionProgressReceiver.getProgressString());
} else {
diff --git a/src/test/shell/integration/experimental_ui_test.sh b/src/test/shell/integration/experimental_ui_test.sh
index bb350bca2c..eea40c0cc8 100755
--- a/src/test/shell/integration/experimental_ui_test.sh
+++ b/src/test/shell/integration/experimental_ui_test.sh
@@ -140,6 +140,13 @@ function test_subcommand_notdefault {
expect_not_log "dragons"
}
-
+function test_loading_progress {
+ bazel clean || fail "bazel clean failed"
+ bazel test --experimental_ui \
+ --experimental_skyframe_target_pattern_evaluator pkg:true 2>$TEST_log \
+ || fail "bazel test failed"
+ # some progress indicator is shown during loading
+ expect_log 'Loading.*[0-9,]* / [0-9,]*'
+}
run_suite "Integration tests for bazel's experimental UI"