Move TimestampGranularityMonitor to CommandEnvironment.

This is one of the last pieces of state in BlazeRuntime that isn't safe to
share across command invocations.

--
MOS_MIGRATED_REVID=117910631
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java
index 3e10330..d77f7e3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java
@@ -21,6 +21,7 @@
 import com.google.devtools.build.skyframe.SkyValue;
 
 import java.io.IOException;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * A {@link SkyFunction} for {@link FileStateValue}s.
@@ -30,10 +31,10 @@
  */
 public class FileStateFunction implements SkyFunction {
 
-  private final TimestampGranularityMonitor tsgm;
+  private final AtomicReference<TimestampGranularityMonitor> tsgm;
   private final ExternalFilesHelper externalFilesHelper;
 
-  public FileStateFunction(TimestampGranularityMonitor tsgm,
+  public FileStateFunction(AtomicReference<TimestampGranularityMonitor> tsgm,
       ExternalFilesHelper externalFilesHelper) {
     this.tsgm = tsgm;
     this.externalFilesHelper = externalFilesHelper;
@@ -48,7 +49,7 @@
       if (env.valuesMissing()) {
         return null;
       }
-      return FileStateValue.create(rootedPath, tsgm);
+      return FileStateValue.create(rootedPath, tsgm.get());
     } catch (FileOutsidePackageRootsException e) {
       throw new FileStateFunctionException(e);
     } catch (IOException e) {