aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java30
4 files changed, 43 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java
index d0f4c9943a..f5f7e866b2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java
@@ -73,6 +73,9 @@ public interface DiffAwareness extends Closeable {
ModifiedFileSet getDiff(View oldView, View newView)
throws IncompatibleViewException, BrokenDiffAwarenessException;
+ /** @return the name of this implementation */
+ String name();
+
/**
* Must be called whenever the {@link DiffAwareness} object is to be discarded. Using a
* {@link DiffAwareness} instance after calling {@link #close} on it is unspecified behavior.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java
index d1bb81e30c..2248607c0b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.Path;
import java.util.Map;
+import java.util.logging.Logger;
import javax.annotation.Nullable;
@@ -31,6 +32,8 @@ import javax.annotation.Nullable;
*/
public final class DiffAwarenessManager {
+ private static final Logger LOG = Logger.getLogger(DiffAwarenessManager.class.getName());
+
private final ImmutableSet<? extends DiffAwareness.Factory> diffAwarenessFactories;
private Map<Path, DiffAwarenessState> currentDiffAwarenessStates = Maps.newHashMap();
private final Reporter reporter;
@@ -108,6 +111,7 @@ public final class DiffAwarenessManager {
} catch (IncompatibleViewException e) {
throw new IllegalStateException(pathEntry + " " + baselineView + " " + newView, e);
}
+
ProcessableModifiedFileSet result = new ProcessableModifiedFileSetImpl(diff, pathEntry,
newView);
return result;
@@ -132,6 +136,7 @@ public final class DiffAwarenessManager {
for (DiffAwareness.Factory factory : diffAwarenessFactories) {
DiffAwareness newDiffAwareness = factory.maybeCreate(pathEntry);
if (newDiffAwareness != null) {
+ LOG.info("Using " + newDiffAwareness.name() + " DiffAwareness strategy for " + pathEntry);
diffAwarenessState = new DiffAwarenessState(newDiffAwareness, /*previousView=*/null);
currentDiffAwarenessStates.put(pathEntry, diffAwarenessState);
return diffAwarenessState;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java
index 43d2556315..f3c02538ce 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java
@@ -167,6 +167,11 @@ public class LocalDiffAwareness implements DiffAwareness {
}
@Override
+ public String name() {
+ return "local";
+ }
+
+ @Override
public void close() {
try {
watchService.close();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index f8265c9101..970c120a8f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
@@ -68,12 +69,16 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
+import java.util.logging.Logger;
/**
* A SkyframeExecutor that implicitly assumes that builds can be done incrementally from the most
* recent build. In other words, builds are "sequenced".
*/
public final class SequencedSkyframeExecutor extends SkyframeExecutor {
+
+ private static final Logger LOG = Logger.getLogger(SequencedSkyframeExecutor.class.getName());
+
/** Lower limit for number of loaded packages to consider clearing CT values. */
private int valueCacheEvictionLimit = -1;
@@ -279,8 +284,11 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
DiffAwarenessManager.ProcessableModifiedFileSet modifiedFileSet =
diffAwarenessManager.getDiff(pathEntry);
if (modifiedFileSet.getModifiedFileSet().treatEverythingAsModified()) {
+ LOG.info("DiffAwareness treating all sources as modified for " + pathEntry);
pathEntriesWithoutDiffInformation.add(Pair.of(pathEntry, modifiedFileSet));
} else {
+ LOG.info(diffInfoLogString(pathEntry,
+ modifiedFileSet.getModifiedFileSet().modifiedSourceFiles()));
modifiedFilesByPathEntry.put(pathEntry, modifiedFileSet);
}
}
@@ -288,6 +296,28 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
handleDiffsWithMissingDiffInformation(pathEntriesWithoutDiffInformation);
}
+ private static String diffInfoLogString(Path pathEntry,
+ ImmutableSet<PathFragment> modifiedFileSet) {
+ int numModified = modifiedFileSet.size();
+ StringBuilder result = new StringBuilder("DiffAwareness found ")
+ .append(numModified)
+ .append(" modified source files for ")
+ .append(pathEntry.getPathString());
+
+ if (numModified > 0) {
+ Iterable<String> trimmed = PathFragment.safePathStrings(
+ Iterables.limit(modifiedFileSet, 5));
+ result.append(": ")
+ .append(Joiner.on(", ").join(trimmed));
+
+ if (numModified > 5) {
+ result.append(", ...");
+ }
+ }
+
+ return result.toString();
+ }
+
/**
* Invalidates files under path entries whose corresponding {@link DiffAwareness} gave an exact
* diff. Removes entries from the given map as they are processed. All of the files need to be