diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
index b08cec71..bd6038f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
@@ -89,7 +89,7 @@
     Path path = rootedPath.asPath();
     if (statNoFollow.isFile()) {
       return statNoFollow.isSpecialFile()
-          ? SpecialFileStateValue.fromStat(statNoFollow, tsgm)
+          ? SpecialFileStateValue.fromStat(path.asFragment(), statNoFollow, tsgm)
           : RegularFileStateValue.fromPath(path, statNoFollow, tsgm);
     } else if (statNoFollow.isDirectory()) {
       return DIRECTORY_FILE_STATE_NODE;
@@ -172,7 +172,7 @@
           // Note that TimestampGranularityMonitor#notifyDependenceOnFileTime is a thread-safe
           // method.
           if (tsgm != null) {
-            tsgm.notifyDependenceOnFileTime(mtime);
+            tsgm.notifyDependenceOnFileTime(path.asFragment(), mtime);
           }
           return new RegularFileStateValue(stat.getSize(), stat.getLastModifiedTime(), null,
               FileContentsProxy.create(mtime, stat.getNodeId()));
@@ -261,13 +261,13 @@
       this.contentsProxy = contentsProxy;
     }
 
-    static SpecialFileStateValue fromStat(FileStatusWithDigest stat,
+    static SpecialFileStateValue fromStat(PathFragment path, FileStatusWithDigest stat,
         @Nullable TimestampGranularityMonitor tsgm) throws IOException {
       long mtime = stat.getLastModifiedTime();
       // Note that TimestampGranularityMonitor#notifyDependenceOnFileTime is a thread-safe
       // method.
       if (tsgm != null) {
-        tsgm.notifyDependenceOnFileTime(mtime);
+        tsgm.notifyDependenceOnFileTime(path, mtime);
       }
       return new SpecialFileStateValue(FileContentsProxy.create(mtime, stat.getNodeId()));
     }
diff --git a/src/main/java/com/google/devtools/build/lib/util/io/TimestampGranularityMonitor.java b/src/main/java/com/google/devtools/build/lib/util/io/TimestampGranularityMonitor.java
index 09d0067..2924b37 100644
--- a/src/main/java/com/google/devtools/build/lib/util/io/TimestampGranularityMonitor.java
+++ b/src/main/java/com/google/devtools/build/lib/util/io/TimestampGranularityMonitor.java
@@ -20,6 +20,9 @@
 import com.google.devtools.build.lib.profiler.ProfilerTask;
 import com.google.devtools.build.lib.util.Clock;
 
+import com.google.devtools.build.lib.vfs.PathFragment;
+import java.util.logging.Logger;
+
 /**
  * A utility class for dealing with filesystem timestamp granularity issues.
  *
@@ -36,8 +39,8 @@
  * on foo/bar is not changed by the second command, even though some time has
  * passed, because the times are the same when rounded to the file system
  * timestamp granularity (often 1 second).
- * For performance, we assume that files
- * timestamps haven't changed  can safely be cached without reexamining their contents.
+ * For performance, we assume that files whose
+ * timestamps haven't changed can safely be cached without reexamining their contents.
  * But this assumption would be violated in the above scenario.
  *
  * <p>
@@ -72,6 +75,7 @@
  */
 @ThreadCompatible
 public class TimestampGranularityMonitor {
+  private static final Logger log = Logger.getLogger(TimestampGranularityMonitor.class.getName());
 
   /**
    * The time of the start of the current Blaze command,
@@ -121,11 +125,13 @@
    * of a build file or source file with the specified time stamp.
    */
   @ThreadSafe
-  public void notifyDependenceOnFileTime(long mtime) {
+  public void notifyDependenceOnFileTime(PathFragment path, long mtime) {
     if (mtime == this.commandStartTimeMillis) {
+      log.info("Will have to wait for a millisecond on completion because of " + path);
       this.waitAMillisecond = true;
     }
     if (mtime == this.commandStartTimeMillisRounded) {
+      log.info("Will have to wait for a second on completion because of " + path);
       this.waitASecond = true;
     }
   }
@@ -147,6 +153,7 @@
    */
   public void waitForTimestampGranularity(OutErr outErr) {
     if (this.waitASecond || this.waitAMillisecond) {
+      long before = clock.currentTimeMillis();
       long startedWaiting = Profiler.nanoTimeMaybe();
       boolean interrupted = false;
 
@@ -180,6 +187,8 @@
 
       Profiler.instance().logSimpleTask(startedWaiting, ProfilerTask.WAIT,
                                         "Timestamp granularity");
+      log.info("Waited for " + (clock.currentTimeMillis() - before) + "ms for file system"
+          + " to catch up");
     }
   }
 
