diff options
author | tomlu <tomlu@google.com> | 2017-10-18 06:23:14 +0200 |
---|---|---|
committer | Jakob Buchgraber <buchgr@google.com> | 2017-10-18 10:28:28 +0200 |
commit | 72642a24f24a7d81929f7c1338d5531ef4fbe9f2 (patch) | |
tree | a9063668c05c46a3eb20e75077816e59ce95b2fe /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | |
parent | 41273d4e2e4e6bffb832110b3f29aef5dfd781f6 (diff) |
Add memory profiler.
This adds two dump command, bazel dump --rules and bazel dump --skylark_memory.
dump --rules outputs a summary of the count, action count, and memory consumption of each rule and aspect class.
dump --skylark_memory outputs a pprof-compatible file with all Skylark analysis allocations. Users can then use pprof as per normal to analyse their builds.
RELNOTES: Add memory profiler.
PiperOrigin-RevId: 172558600
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java index f67a4e883e..def0b02d0b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java @@ -51,6 +51,7 @@ import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.lib.packages.SkylarkAspect; import com.google.devtools.build.lib.packages.SkylarkAspectClass; import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.profiler.memory.CurrentRuleTracker; import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey; import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredTargetFunctionException; import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredValueCreationException; @@ -468,19 +469,24 @@ public final class AspectFunction implements SkyFunction { ConfiguredAspect configuredAspect; if (AspectResolver.aspectMatchesConfiguredTarget(associatedTarget, aspect)) { - configuredAspect = - view.getConfiguredTargetFactory() - .createAspect( - analysisEnvironment, - associatedTarget, - aspectPath, - aspectFactory, - aspect, - directDeps, - configConditions, - toolchainContext, - aspectConfiguration, - view.getHostConfiguration(aspectConfiguration)); + try { + CurrentRuleTracker.beginConfiguredAspect(aspect.getAspectClass()); + configuredAspect = + view.getConfiguredTargetFactory() + .createAspect( + analysisEnvironment, + associatedTarget, + aspectPath, + aspectFactory, + aspect, + directDeps, + configConditions, + toolchainContext, + aspectConfiguration, + view.getHostConfiguration(aspectConfiguration)); + } finally { + CurrentRuleTracker.endConfiguredAspect(); + } } else { configuredAspect = ConfiguredAspect.forNonapplicableTarget(aspect.getDescriptor()); } |