Save subtasks for Skylark function profiler tasks and then report self time of function calls in HTML output

--
MOS_MIGRATED_REVID=102663672
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java
index a7547de..e3634f1 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java
@@ -147,7 +147,8 @@
       }
     }
 
-    long startTime = Profiler.nanoTimeMaybe();
+    Profiler.instance().startTask(ProfilerTask.SKYLARK_BUILTIN_FN,
+        this.getClass().getName() + "#" + getName());
     // Last but not least, actually make an inner call to the function with the resolved arguments.
     try {
       return invokeMethod.invoke(this, args);
@@ -189,10 +190,7 @@
     } catch (IllegalAccessException e) {
       throw badCallException(loc, e, args);
     } finally {
-      Profiler.instance().logSimpleTask(
-          startTime,
-          ProfilerTask.SKYLARK_BUILTIN_FN,
-          this.getClass().getName() + "#" + getName());
+      Profiler.instance().completeTask(ProfilerTask.SKYLARK_BUILTIN_FN);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
index f50e6ee..1ad455da 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
@@ -56,7 +56,8 @@
       env.update(name, arguments[i++]);
     }
 
-    long startTimeProfiler = Profiler.nanoTimeMaybe();
+    Profiler.instance().startTask(ProfilerTask.SKYLARK_USER_FN,
+        getLocationPathAndLine() + "#" + getName());
     Statement lastStatement = null;
     try {
       for (Statement stmt : statements) {
@@ -75,10 +76,7 @@
       real.registerStatement(lastStatement);
       throw real;
     } finally {
-      Profiler.instance().logSimpleTask(
-          startTimeProfiler,
-          ProfilerTask.SKYLARK_USER_FN,
-          getLocationPathAndLine() + "#" + getName());
+      Profiler.instance().completeTask(ProfilerTask.SKYLARK_USER_FN);
     }
     return Runtime.NONE;
   }