diff options
author | Googler <noreply@google.com> | 2015-09-02 15:14:38 +0000 |
---|---|---|
committer | Florian Weikert <fwe@google.com> | 2015-09-02 16:26:42 +0000 |
commit | fe98ecb944e49848622b9c2f97e8d3211d9d889f (patch) | |
tree | 81d379d740f2ca83ea56f812ab92206800a1a6ab /src/main/java/com/google/devtools/build/lib/syntax | |
parent | aaa2486e5c06179ba1d859113510b951e2912e69 (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.java | 7 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java | 31 |
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 |