diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
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 |