diff options
author | tomlu <tomlu@google.com> | 2018-01-17 14:36:26 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-17 14:37:59 -0800 |
commit | ee6a6862e26704854fb08bd90912890814cc3426 (patch) | |
tree | 294eac82202e393c5baae0e357325f2488ab3cbb /src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java | |
parent | f323fb3043bc782526e0e47933efedea9c5c2ad9 (diff) |
Introduce Root class.
This class represents a root (such as a package path or an output root) used for file lookups and artifacts. It is meant to be as opaque as possible in order to hide the user's environment from sky keys and sky functions.
Roots are used by RootedPaths and ArtifactRoots.
This CL attempts to make the minimum number of modifications necessary to change RootedPath and ArtifactRoot to use these fields. Deprecated methods and invasive accessors are permitted to minimise the risk of any observable changes.
RELNOTES: None
PiperOrigin-RevId: 182271759
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java | 35 |
1 files changed, 19 insertions, 16 deletions
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 0313d477d8..c9f87fad3b 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 @@ -66,6 +66,7 @@ import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.ModifiedFileSet; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.skyframe.BuildDriver; import com.google.devtools.build.skyframe.Differencer; import com.google.devtools.build.skyframe.InMemoryMemoizingEvaluator; @@ -312,11 +313,11 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { } TimestampGranularityMonitor tsgm = this.tsgm.get(); modifiedFiles = 0; - Map<Path, DiffAwarenessManager.ProcessableModifiedFileSet> modifiedFilesByPathEntry = + Map<Root, DiffAwarenessManager.ProcessableModifiedFileSet> modifiedFilesByPathEntry = Maps.newHashMap(); - Set<Pair<Path, DiffAwarenessManager.ProcessableModifiedFileSet>> + Set<Pair<Root, DiffAwarenessManager.ProcessableModifiedFileSet>> pathEntriesWithoutDiffInformation = Sets.newHashSet(); - for (Path pathEntry : pkgLocator.get().getPathEntries()) { + for (Root pathEntry : pkgLocator.get().getPathEntries()) { DiffAwarenessManager.ProcessableModifiedFileSet modifiedFileSet = diffAwarenessManager.getDiff(eventHandler, pathEntry, options); if (modifiedFileSet.getModifiedFileSet().treatEverythingAsModified()) { @@ -359,10 +360,11 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { * diff. Removes entries from the given map as they are processed. All of the files need to be * invalidated, so the map should be empty upon completion of this function. */ - private void handleDiffsWithCompleteDiffInformation(TimestampGranularityMonitor tsgm, - Map<Path, DiffAwarenessManager.ProcessableModifiedFileSet> modifiedFilesByPathEntry) - throws InterruptedException { - for (Path pathEntry : ImmutableSet.copyOf(modifiedFilesByPathEntry.keySet())) { + private void handleDiffsWithCompleteDiffInformation( + TimestampGranularityMonitor tsgm, + Map<Root, DiffAwarenessManager.ProcessableModifiedFileSet> modifiedFilesByPathEntry) + throws InterruptedException { + for (Root pathEntry : ImmutableSet.copyOf(modifiedFilesByPathEntry.keySet())) { DiffAwarenessManager.ProcessableModifiedFileSet processableModifiedFileSet = modifiedFilesByPathEntry.get(pathEntry); ModifiedFileSet modifiedFileSet = processableModifiedFileSet.getModifiedFileSet(); @@ -380,7 +382,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { private void handleDiffsWithMissingDiffInformation( ExtendedEventHandler eventHandler, TimestampGranularityMonitor tsgm, - Set<Pair<Path, DiffAwarenessManager.ProcessableModifiedFileSet>> + Set<Pair<Root, DiffAwarenessManager.ProcessableModifiedFileSet>> pathEntriesWithoutDiffInformation, boolean checkOutputFiles) throws InterruptedException { @@ -406,8 +408,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { // system values under package roots for which we don't have diff information. If at least // one path entry doesn't have diff information, then we're going to have to iterate over // the skyframe values at least once no matter what. - Set<Path> diffPackageRootsUnderWhichToCheck = new HashSet<>(); - for (Pair<Path, DiffAwarenessManager.ProcessableModifiedFileSet> pair : + Set<Root> diffPackageRootsUnderWhichToCheck = new HashSet<>(); + for (Pair<Root, DiffAwarenessManager.ProcessableModifiedFileSet> pair : pathEntriesWithoutDiffInformation) { diffPackageRootsUnderWhichToCheck.add(pair.getFirst()); } @@ -438,7 +440,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { new MissingDiffDirtinessChecker(diffPackageRootsUnderWhichToCheck))))); handleChangedFiles(diffPackageRootsUnderWhichToCheck, diff); - for (Pair<Path, DiffAwarenessManager.ProcessableModifiedFileSet> pair : + for (Pair<Root, DiffAwarenessManager.ProcessableModifiedFileSet> pair : pathEntriesWithoutDiffInformation) { pair.getSecond().markProcessed(); } @@ -450,7 +452,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { } private void handleChangedFiles( - Collection<Path> diffPackageRootsUnderWhichToCheck, Differencer.Diff diff) { + Collection<Root> diffPackageRootsUnderWhichToCheck, Differencer.Diff diff) { Collection<SkyKey> changedKeysWithoutNewValues = diff.changedKeysWithoutNewValues(); Map<SkyKey, SkyValue> changedKeysWithNewValues = diff.changedKeysWithNewValues(); @@ -467,9 +469,10 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { private static final int MAX_NUMBER_OF_CHANGED_KEYS_TO_LOG = 10; - private static void logDiffInfo(Iterable<Path> pathEntries, - Collection<SkyKey> changedWithoutNewValue, - Map<SkyKey, ? extends SkyValue> changedWithNewValue) { + private static void logDiffInfo( + Iterable<Root> pathEntries, + Collection<SkyKey> changedWithoutNewValue, + Map<SkyKey, ? extends SkyValue> changedWithNewValue) { int numModified = changedWithNewValue.size() + changedWithoutNewValue.size(); StringBuilder result = new StringBuilder("DiffAwareness found ") .append(numModified) @@ -564,7 +567,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { @Override public void invalidateFilesUnderPathForTesting( - ExtendedEventHandler eventHandler, ModifiedFileSet modifiedFileSet, Path pathEntry) + ExtendedEventHandler eventHandler, ModifiedFileSet modifiedFileSet, Root pathEntry) throws InterruptedException { if (lastAnalysisDiscarded) { // Values were cleared last build, but they couldn't be deleted because they were needed for |