diff options
Diffstat (limited to 'src/main/java/com')
3 files changed, 23 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java index 6f92ae0a06..c4b1e5f301 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.runtime.commands; import static java.util.stream.Collectors.toList; import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.RuleClass; @@ -222,7 +223,7 @@ public class DumpCommand implements BlazeCommand { } if (dumpOptions.dumpRules) { - dumpRuleStats(env.getBlazeWorkspace(), env.getSkyframeExecutor(), out); + dumpRuleStats(env.getReporter(), env.getBlazeWorkspace(), env.getSkyframeExecutor(), out); out.println(); } @@ -290,8 +291,12 @@ public class DumpCommand implements BlazeCommand { } } - private void dumpRuleStats(BlazeWorkspace workspace, SkyframeExecutor executor, PrintStream out) { - List<RuleStat> ruleStats = executor.getRuleStats(); + private void dumpRuleStats( + ExtendedEventHandler eventHandler, + BlazeWorkspace workspace, + SkyframeExecutor executor, + PrintStream out) { + List<RuleStat> ruleStats = executor.getRuleStats(eventHandler); if (ruleStats.isEmpty()) { out.print("No rules in Blaze server, please run a build command first."); return; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java index d32e94602f..20b05f0d46 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java @@ -41,8 +41,11 @@ import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.BuildFileName; +import com.google.devtools.build.lib.packages.NoSuchPackageException; +import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.packages.PackageFactory; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.SkylarkSemanticsOptions; import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; @@ -692,7 +695,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { } @Override - public List<RuleStat> getRuleStats() { + public List<RuleStat> getRuleStats(ExtendedEventHandler eventHandler) { Map<String, RuleStat> ruleStats = new HashMap<>(); for (Map.Entry<SkyKey, ? extends NodeEntry> skyKeyAndNodeEntry : memoizingEvaluator.getGraphMap().entrySet()) { @@ -707,8 +710,17 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { ConfiguredTargetValue ctValue = (ConfiguredTargetValue) entry.getValue(); ConfiguredTarget configuredTarget = ctValue.getConfiguredTarget(); if (configuredTarget instanceof RuleConfiguredTarget) { + + Rule rule; + try { + rule = + (Rule) getPackageManager().getTarget(eventHandler, configuredTarget.getLabel()); + } catch (NoSuchPackageException | NoSuchTargetException | InterruptedException e) { + throw new IllegalStateException( + "Failed to get Rule target from package when calculating stats.", e); + } RuleConfiguredTarget ruleConfiguredTarget = (RuleConfiguredTarget) configuredTarget; - RuleClass ruleClass = ruleConfiguredTarget.getTarget().getRuleClassObject(); + RuleClass ruleClass = rule.getRuleClassObject(); RuleStat ruleStat = ruleStats.computeIfAbsent( ruleClass.getKey(), k -> new RuleStat(k, ruleClass.getName(), true)); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 4cc660209a..5677caad8d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -686,7 +686,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { } /** Computes statistics on heap-resident rules and aspects. */ - public abstract List<RuleStat> getRuleStats(); + public abstract List<RuleStat> getRuleStats(ExtendedEventHandler eventHandler); /** * Removes ConfigurationFragmentValues from the cache. |