aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Michajlo Matijkiw <michajlo@google.com>2015-05-15 20:46:13 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2015-05-18 09:16:50 +0000
commit0b09d289d52351b3e67d7a6b9b64e9fe24cf2893 (patch)
tree599a49a23338e1e17af604f25f5a25c94e49045f /src
parent6961ad19c8ed7f4d9d7603d0c12fe76737c001d3 (diff)
Add some basic logging around DiffAwareness
Some simple logging to tell us what strategy we are using and how many files we detect as modified. Useful for debugging slow (or fast) builds. -- MOS_MIGRATED_REVID=93745644
Diffstat (limited to 'src')
-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