aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-09-02 15:14:38 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-09-02 16:26:42 +0000
commitfe98ecb944e49848622b9c2f97e8d3211d9d889f (patch)
tree81d379d740f2ca83ea56f812ab92206800a1a6ab /src/main/java/com/google/devtools/build/lib/syntax
parentaaa2486e5c06179ba1d859113510b951e2912e69 (diff)
Show a column with the location of a skylark function in HTML profiling statistics.
-- MOS_MIGRATED_REVID=102143715
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java31
2 files changed, 36 insertions, 2 deletions
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 9fcf9a4403..a7547deca3 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
@@ -19,12 +19,14 @@ import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor.HackHackEitherList;
import com.google.devtools.build.lib.syntax.SkylarkType.SkylarkFunctionType;
+
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.NoSuchElementException;
import java.util.concurrent.ExecutionException;
+
import javax.annotation.Nullable;
/**
@@ -187,7 +189,10 @@ public class BuiltinFunction extends BaseFunction {
} catch (IllegalAccessException e) {
throw badCallException(loc, e, args);
} finally {
- Profiler.instance().logSimpleTask(startTime, ProfilerTask.SKYLARK_BUILTIN_FN, getName());
+ Profiler.instance().logSimpleTask(
+ startTime,
+ ProfilerTask.SKYLARK_BUILTIN_FN,
+ this.getClass().getName() + "#" + getName());
}
}
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 3e37c009ad..f50e6ee5f1 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
@@ -14,8 +14,10 @@
package com.google.devtools.build.lib.syntax;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.events.Location.LineAndColumn;
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
+import com.google.devtools.build.lib.vfs.PathFragment;
/**
* The actual function registered in the environment. This function is defined in the
@@ -73,12 +75,39 @@ public class UserDefinedFunction extends BaseFunction {
real.registerStatement(lastStatement);
throw real;
} finally {
- Profiler.instance().logSimpleTask(startTimeProfiler, ProfilerTask.SKYLARK_USER_FN, getName());
+ Profiler.instance().logSimpleTask(
+ startTimeProfiler,
+ ProfilerTask.SKYLARK_USER_FN,
+ getLocationPathAndLine() + "#" + getName());
}
return Runtime.NONE;
}
/**
+ * Returns the location (filename:line) of the BaseFunction's definition.
+ *
+ * <p>If such a location is not defined, this method returns an empty string.
+ */
+ private String getLocationPathAndLine() {
+ if (location == null) {
+ return "";
+ }
+
+ StringBuilder builder = new StringBuilder();
+ PathFragment path = location.getPath();
+ if (path != null) {
+ builder.append(path.getPathString());
+ }
+
+ LineAndColumn position = location.getStartLineAndColumn();
+ if (position != null) {
+ builder.append(":").append(position.getLine());
+ }
+ return builder.toString();
+ }
+
+
+ /**
* Creates a new environment for the execution of this function.
*/
@Override