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;
}