Add a method to EvaluationProgressReceiver for getting information on SkyFunction#compute calls.

--
MOS_MIGRATED_REVID=102268773
diff --git a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java
index 88bd0ee..991dad6 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java
@@ -720,9 +720,8 @@
       Preconditions.checkState(factory != null, "%s %s", functionName, state);
 
       SkyValue value = null;
-      Profiler.instance().startTask(ProfilerTask.SKYFUNCTION, skyKey);
+      long startTime = Profiler.nanoTimeMaybe();
       try {
-        // TODO(bazel-team): count how many of these calls returns null vs. non-null
         value = factory.compute(skyKey, env);
       } catch (final SkyFunctionException builderException) {
         ReifiedSkyFunctionException reifiedBuilderException =
@@ -762,7 +761,14 @@
         throw new RuntimeException(msg, re);
       } finally {
         env.doneBuilding();
-        Profiler.instance().completeTask(ProfilerTask.SKYFUNCTION);
+        long elapsedTimeNanos = Profiler.nanoTimeMaybe() - startTime;
+        if (elapsedTimeNanos > 0)  {
+          if (progressReceiver != null) {
+            progressReceiver.computed(skyKey, elapsedTimeNanos);
+          }
+          Profiler.instance().logSimpleTaskDuration(startTime, elapsedTimeNanos,
+              ProfilerTask.SKYFUNCTION, skyKey);
+        }
       }
 
       GroupedListHelper<SkyKey> newDirectDeps = env.newlyRequestedDeps;