Internal changes.

PiperOrigin-RevId: 561629754
Change-Id: I40f0c94354ebb7f94f54801df3e494240f7c5c07
diff --git a/src/main/java/com/google/devtools/build/skyframe/AbstractIncrementalInMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/AbstractIncrementalInMemoryMemoizingEvaluator.java
index 68106c6..0e1d918 100644
--- a/src/main/java/com/google/devtools/build/skyframe/AbstractIncrementalInMemoryMemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/AbstractIncrementalInMemoryMemoizingEvaluator.java
@@ -15,13 +15,18 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+import com.google.devtools.build.lib.profiler.AutoProfiler;
+import com.google.devtools.build.lib.profiler.GoogleAutoProfilerUtils;
 import com.google.devtools.build.skyframe.Differencer.DiffWithDelta.Delta;
 import com.google.devtools.build.skyframe.InvalidatingNodeVisitor.DeletingInvalidationState;
 import com.google.devtools.build.skyframe.InvalidatingNodeVisitor.DirtyingInvalidationState;
 import com.google.devtools.build.skyframe.InvalidatingNodeVisitor.InvalidationState;
 import com.google.devtools.build.skyframe.QueryableGraph.Reason;
+import java.time.Duration;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -29,6 +34,7 @@
 import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Predicate;
 import javax.annotation.Nullable;
 
 /**
@@ -37,6 +43,7 @@
  */
 public abstract class AbstractIncrementalInMemoryMemoizingEvaluator
     extends AbstractInMemoryMemoizingEvaluator {
+  private static final Duration MIN_TIME_TO_LOG_DELETION = Duration.ofMillis(10);
 
   protected final ImmutableMap<SkyFunctionName, SkyFunction> skyFunctions;
   protected final DirtyTrackingProgressReceiver progressReceiver;
@@ -82,6 +89,37 @@
     this.keepEdges = keepEdges;
   }
 
+  @Override
+  public void delete(Predicate<SkyKey> deletePredicate) {
+    try (AutoProfiler ignored =
+        GoogleAutoProfilerUtils.logged("deletion marking", MIN_TIME_TO_LOG_DELETION)) {
+      Set<SkyKey> toDelete = Sets.newConcurrentHashSet();
+      getInMemoryGraph()
+          .parallelForEach(
+              e -> {
+                if (e.isDirty() || deletePredicate.test(e.getKey())) {
+                  toDelete.add(e.getKey());
+                }
+              });
+      valuesToDelete.addAll(toDelete);
+    }
+  }
+
+  @Override
+  public void deleteDirty(long versionAgeLimit) {
+    Preconditions.checkArgument(versionAgeLimit >= 0, versionAgeLimit);
+    Version threshold = IntVersion.of(lastGraphVersion.getVal() - versionAgeLimit);
+    valuesToDelete.addAll(
+        Sets.filter(
+            progressReceiver.getUnenqueuedDirtyKeys(),
+            skyKey -> {
+              NodeEntry entry = getInMemoryGraph().get(null, Reason.OTHER, skyKey);
+              Preconditions.checkNotNull(entry, skyKey);
+              Preconditions.checkState(entry.isDirty(), skyKey);
+              return entry.getVersion().atMost(threshold);
+            }));
+  }
+
   protected void invalidate(Iterable<SkyKey> diff) {
     Iterables.addAll(valuesToDirty, diff);
   }
diff --git a/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java b/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java
index bfecc42..62fe1bf 100644
--- a/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/DirtyTrackingProgressReceiver.java
@@ -141,12 +141,11 @@
   }
 
   /**
-   * Returns the set of all dirty keys that have not been enqueued.
-   * This is useful for garbage collection, where we would not want to remove dirty nodes that are
-   * needed for evaluation (in the downward transitive closure of the set of the evaluation's
-   * top level nodes).
+   * Returns the set of all dirty keys that have not been enqueued. This is useful for garbage
+   * collection, where we would not want to remove dirty nodes that are needed for evaluation (in
+   * the downward transitive closure of the set of the evaluation's top level nodes).
    */
-  protected Set<SkyKey> getUnenqueuedDirtyKeys(){
+  protected Set<SkyKey> getUnenqueuedDirtyKeys() {
     return ImmutableSet.copyOf(dirtyKeys);
   }
 
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
index e3ee976..2f3e8ed 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
@@ -15,20 +15,13 @@
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Sets;
 import com.google.devtools.build.lib.concurrent.AbstractQueueVisitor;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.profiler.AutoProfiler;
-import com.google.devtools.build.lib.profiler.GoogleAutoProfilerUtils;
 import com.google.devtools.build.lib.profiler.Profiler;
 import com.google.devtools.build.lib.profiler.SilentCloseable;
 import com.google.devtools.build.skyframe.Differencer.Diff;
-import com.google.devtools.build.skyframe.QueryableGraph.Reason;
-import java.time.Duration;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Predicate;
 import javax.annotation.Nullable;
 
 /**
@@ -90,38 +83,6 @@
             : InMemoryGraph.createEdgeless(usePooledInterning);
   }
 
-  private static final Duration MIN_TIME_TO_LOG_DELETION = Duration.ofMillis(10);
-
-  @Override
-  public void delete(Predicate<SkyKey> deletePredicate) {
-    try (AutoProfiler ignored =
-        GoogleAutoProfilerUtils.logged("deletion marking", MIN_TIME_TO_LOG_DELETION)) {
-      Set<SkyKey> toDelete = Sets.newConcurrentHashSet();
-      graph.parallelForEach(
-          e -> {
-            if (e.isDirty() || deletePredicate.test(e.getKey())) {
-              toDelete.add(e.getKey());
-            }
-          });
-      valuesToDelete.addAll(toDelete);
-    }
-  }
-
-  @Override
-  public void deleteDirty(long versionAgeLimit) {
-    Preconditions.checkArgument(versionAgeLimit >= 0, versionAgeLimit);
-    Version threshold = IntVersion.of(lastGraphVersion.getVal() - versionAgeLimit);
-    valuesToDelete.addAll(
-        Sets.filter(
-            progressReceiver.getUnenqueuedDirtyKeys(),
-            skyKey -> {
-              NodeEntry entry = graph.get(null, Reason.OTHER, skyKey);
-              Preconditions.checkNotNull(entry, skyKey);
-              Preconditions.checkState(entry.isDirty(), skyKey);
-              return entry.getVersion().atMost(threshold);
-            }));
-  }
-
   @Override
   public <T extends SkyValue> EvaluationResult<T> evaluate(
       Iterable<? extends SkyKey> roots, EvaluationContext evaluationContext)
diff --git a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
index 71e4cfe..5265ace 100644
--- a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
+++ b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
@@ -31,7 +31,8 @@
     this.val = val;
   }
 
-  long getVal() {
+  /** Returns the integer value as a long. */
+  public long getVal() {
     return val;
   }
 
diff --git a/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java b/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java
index 263071d..6c4e3a4 100644
--- a/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java
+++ b/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java
@@ -197,11 +197,11 @@
   }
 
   /** {@link NodeEntry} that informs a {@link Listener} of various method calls. */
-  class NotifyingNodeEntry extends DelegatingNodeEntry {
+  public class NotifyingNodeEntry extends DelegatingNodeEntry {
     private final SkyKey myKey;
     private final NodeEntry delegate;
 
-    NotifyingNodeEntry(SkyKey key, NodeEntry delegate) {
+    protected NotifyingNodeEntry(SkyKey key, NodeEntry delegate) {
       myKey = key;
       this.delegate = delegate;
     }