diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java b/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java
index 44665ee..75d5ee2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java
@@ -113,7 +113,7 @@
    */
   public ImmutableBatchDirtyResult getNewAndOldValues(
       Map<SkyKey, SkyValue> valuesMap,
-      Iterable<SkyKey> keys,
+      Collection<SkyKey> keys,
       SkyValueDirtinessChecker dirtinessChecker)
       throws InterruptedException {
     return getDirtyValues(new MapBackedValueFetcher(valuesMap), keys,
@@ -124,9 +124,11 @@
    * Returns a {@link Differencer.DiffWithDelta} containing keys that are dirty according to the
    * passed-in {@code dirtinessChecker}.
    */
-  public Differencer.DiffWithDelta getNewAndOldValues(WalkableGraph walkableGraph,
-      Iterable<SkyKey> keys, SkyValueDirtinessChecker dirtinessChecker)
-          throws InterruptedException {
+  public Differencer.DiffWithDelta getNewAndOldValues(
+      WalkableGraph walkableGraph,
+      Collection<SkyKey> keys,
+      SkyValueDirtinessChecker dirtinessChecker)
+      throws InterruptedException {
     return getDirtyValues(new WalkableGraphBackedValueFetcher(walkableGraph), keys,
         dirtinessChecker, /*checkMissingValues=*/true);
   }
@@ -484,7 +486,7 @@
 
   private ImmutableBatchDirtyResult getDirtyValues(
       ValueFetcher fetcher,
-      Iterable<SkyKey> keys,
+      Collection<SkyKey> keys,
       final SkyValueDirtinessChecker checker,
       final boolean checkMissingValues)
       throws InterruptedException {
@@ -495,7 +497,6 @@
 
     ThrowableRecordingRunnableWrapper wrapper =
         new ThrowableRecordingRunnableWrapper("FilesystemValueChecker#getDirtyValues");
-    final AtomicInteger numKeysScanned = new AtomicInteger(0);
     final AtomicInteger numKeysChecked = new AtomicInteger(0);
     MutableBatchDirtyResult batchResult = new MutableBatchDirtyResult(numKeysChecked);
     ElapsedTimeReceiver elapsedTimeReceiver =
@@ -506,12 +507,11 @@
                     "Spent %d ms checking %d filesystem nodes (%d scanned)",
                     TimeUnit.MILLISECONDS.convert(elapsedTimeNanos, TimeUnit.NANOSECONDS),
                     numKeysChecked.get(),
-                    numKeysScanned.get()));
+                    keys.size()));
           }
         };
     try (AutoProfiler prof = AutoProfiler.create(elapsedTimeReceiver)) {
       for (final SkyKey key : keys) {
-        numKeysScanned.incrementAndGet();
         if (!checker.applies(key)) {
           continue;
         }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 4d60e42..9c37cf0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -16,7 +16,6 @@
 import static com.google.devtools.build.lib.concurrent.Uninterruptibles.callUninterruptibly;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
@@ -1265,23 +1264,20 @@
 
   protected Differencer.Diff getDiff(
       TimestampGranularityMonitor tsgm,
-      Iterable<PathFragment> modifiedSourceFiles,
+      Collection<PathFragment> modifiedSourceFiles,
       final Root pathEntry)
       throws InterruptedException {
-    if (Iterables.isEmpty(modifiedSourceFiles)) {
+    if (modifiedSourceFiles.isEmpty()) {
       return new ImmutableDiff(ImmutableList.<SkyKey>of(), ImmutableMap.<SkyKey, SkyValue>of());
     }
     // TODO(bazel-team): change ModifiedFileSet to work with RootedPaths instead of PathFragments.
-    Iterable<SkyKey> dirtyFileStateSkyKeys =
-        Iterables.transform(
+    Collection<SkyKey> dirtyFileStateSkyKeys =
+        Collections2.transform(
             modifiedSourceFiles,
-            new Function<PathFragment, SkyKey>() {
-              @Override
-              public SkyKey apply(PathFragment pathFragment) {
-                Preconditions.checkState(
-                    !pathFragment.isAbsolute(), "found absolute PathFragment: %s", pathFragment);
-                return FileStateValue.key(RootedPath.toRootedPath(pathEntry, pathFragment));
-              }
+            pathFragment -> {
+              Preconditions.checkState(
+                  !pathFragment.isAbsolute(), "found absolute PathFragment: %s", pathFragment);
+              return FileStateValue.key(RootedPath.toRootedPath(pathEntry, pathFragment));
             });
     // We only need to invalidate directory values when a file has been created or deleted or
     // changes type, not when it has merely been modified. Unfortunately we do not have that
