diff options
Diffstat (limited to 'src')
9 files changed, 142 insertions, 63 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java index b88952acc6..6eddca5e9c 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java @@ -64,6 +64,7 @@ import com.google.devtools.build.lib.pkgcache.LoadingFailedException; import com.google.devtools.build.lib.pkgcache.LoadingResult; import com.google.devtools.build.lib.profiler.ProfilePhase; import com.google.devtools.build.lib.profiler.Profiler; +import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.runtime.BlazeRuntime; import com.google.devtools.build.lib.runtime.CommandEnvironment; import com.google.devtools.build.lib.skyframe.BuildConfigurationValue; @@ -134,15 +135,24 @@ public class BuildTool { throws BuildFailedException, InterruptedException, ViewCreationFailedException, TargetParsingException, LoadingFailedException, AbruptExitException, InvalidConfigurationException, TestExecException, PostAnalysisQueryCommandLineException { - validateOptions(request); - BuildOptions buildOptions = runtime.createBuildOptions(request); + try (SilentCloseable c = Profiler.instance().profile("validateOptions")) { + validateOptions(request); + } + BuildOptions buildOptions; + try (SilentCloseable c = Profiler.instance().profile("createBuildOptions")) { + buildOptions = runtime.createBuildOptions(request); + } // Sync the package manager before sending the BuildStartingEvent in runLoadingPhase() - env.setupPackageCache(request, DefaultsPackage.getDefaultsPackageContent(buildOptions)); + try (SilentCloseable c = Profiler.instance().profile("setupPackageCache")) { + env.setupPackageCache(request, DefaultsPackage.getDefaultsPackageContent(buildOptions)); + } ExecutionTool executionTool = null; boolean catastrophe = false; try { - env.getEventBus().post(new BuildStartingEvent(env, request)); + try (SilentCloseable c = Profiler.instance().profile("BuildStartingEvent")) { + env.getEventBus().post(new BuildStartingEvent(env, request)); + } logger.info("Build identifier: " + request.getId()); // Error out early if multi_cpus is set, but we're not in build or test command. @@ -162,11 +172,17 @@ public class BuildTool { env.throwPendingException(); // Target pattern evaluation. - LoadingResult loadingResult = evaluateTargetPatterns(request, validator); + LoadingResult loadingResult; + Profiler.instance().markPhase(ProfilePhase.LOAD); + try (SilentCloseable c = Profiler.instance().profile("evaluateTargetPatterns")) { + loadingResult = evaluateTargetPatterns(request, validator); + } env.setWorkspaceName(loadingResult.getWorkspaceName()); executionTool = new ExecutionTool(env, request); if (needsExecutionPhase(request.getBuildOptions())) { - executionTool.init(); + try (SilentCloseable closeable = Profiler.instance().profile("ExecutionTool.init")) { + executionTool.init(); + } } // Compute the heuristic instrumentation filter if needed. @@ -191,14 +207,17 @@ public class BuildTool { // Configuration creation. // TODO(gregce): Consider dropping this phase and passing on-the-fly target / host configs as // needed. This requires cleaning up the invalidation in SkyframeBuildView.setConfigurations. - BuildConfigurationCollection configurations = - env.getSkyframeExecutor() - .createConfigurations( - env.getReporter(), - runtime.getConfigurationFragmentFactories(), - buildOptions, - request.getMultiCpus(), - request.getKeepGoing()); + BuildConfigurationCollection configurations; + try (SilentCloseable c = Profiler.instance().profile("createConfigurations")) { + configurations = + env.getSkyframeExecutor() + .createConfigurations( + env.getReporter(), + runtime.getConfigurationFragmentFactories(), + buildOptions, + request.getMultiCpus(), + request.getKeepGoing()); + } env.throwPendingException(); if (configurations.getTargetConfigurations().size() == 1) { @@ -211,7 +230,24 @@ public class BuildTool { logger.info("Configurations created"); if (request.getBuildOptions().performAnalysisPhase) { - AnalysisResult analysisResult = runAnalysisPhase(request, loadingResult, configurations); + Profiler.instance().markPhase(ProfilePhase.ANALYZE); + AnalysisResult analysisResult; + try (SilentCloseable c = Profiler.instance().profile("runAnalysisPhase")) { + analysisResult = runAnalysisPhase(request, loadingResult, configurations); + } + + // Check licenses. + // We check licenses if the first target configuration has license checking enabled. Right + // now, it is not possible to have multiple target configurations with different settings + // for this flag, which allows us to take this short cut. + boolean checkLicenses = configurations.getTargetConfigurations().get(0).checkLicenses(); + if (checkLicenses) { + Profiler.instance().markPhase(ProfilePhase.LICENSE); + try (SilentCloseable c = Profiler.instance().profile("validateLicensingForTargets")) { + validateLicensingForTargets(analysisResult.getTargetsToBuild(), request.getKeepGoing()); + } + } + result.setBuildConfigurationCollection(configurations); result.setActualTargets(analysisResult.getTargetsToBuild()); result.setTestTargets(analysisResult.getTargetsToTest()); @@ -229,7 +265,9 @@ public class BuildTool { AbortReason.SKIPPED, String.format("Target %s build was skipped.", label), label)); } - postProcessAnalysisResult(request, analysisResult); + try (SilentCloseable c = Profiler.instance().profile("postProcessAnalysisResult")) { + postProcessAnalysisResult(request, analysisResult); + } // Execution phase. if (needsExecutionPhase(request.getBuildOptions())) { executionTool.executeBuild( @@ -335,7 +373,6 @@ public class BuildTool { public BuildResult processRequest( BuildRequest request, TargetValidator validator) { BuildResult result = new BuildResult(request.getStartTime()); - env.getEventBus().register(result); maybeSetStopOnFirstFailure(request, result); Throwable catastrophe = null; ExitCode exitCode = ExitCode.BLAZE_INTERNAL_ERROR; @@ -412,7 +449,6 @@ public class BuildTool { private final LoadingResult evaluateTargetPatterns( final BuildRequest request, final TargetValidator validator) throws LoadingFailedException, TargetParsingException, InterruptedException { - Profiler.instance().markPhase(ProfilePhase.LOAD); initializeOutputFilter(request); final boolean keepGoing = request.getKeepGoing(); @@ -465,7 +501,6 @@ public class BuildTool { throws InterruptedException, ViewCreationFailedException { Stopwatch timer = Stopwatch.createStarted(); getReporter().handle(Event.progress("Loading complete. Analyzing...")); - Profiler.instance().markPhase(ProfilePhase.ANALYZE); BuildView view = new BuildView(env.getDirectories(), runtime.getRuleClassProvider(), env.getSkyframeExecutor(), runtime.getCoverageReportActionFactory(request)); @@ -510,17 +545,6 @@ public class BuildTool { analysisResult.getTargetsToBuild(), analysisResult.getTargetsToTest(), configurationMap)); - - // Check licenses. - // We check licenses if the first target configuration has license checking enabled. Right now, - // it is not possible to have multiple target configurations with different settings for this - // flag, which allows us to take this short cut. - boolean checkLicenses = configurations.getTargetConfigurations().get(0).checkLicenses(); - if (checkLicenses) { - Profiler.instance().markPhase(ProfilePhase.LICENSE); - validateLicensingForTargets(analysisResult.getTargetsToBuild(), request.getKeepGoing()); - } - return analysisResult; } diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java index 58afd6b430..78b350b9d7 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java @@ -128,11 +128,15 @@ public class ExecutionTool { // Create tools before getting the strategies from the modules as some of them need tools to // determine whether the host actually supports certain strategies (e.g. sandboxing). - createToolsSymlinks(); + try (SilentCloseable closeable = Profiler.instance().profile("createToolsSymlinks")) { + createToolsSymlinks(); + } ExecutorBuilder builder = new ExecutorBuilder(); for (BlazeModule module : runtime.getBlazeModules()) { - module.executorInit(env, request, builder); + try (SilentCloseable closeable = Profiler.instance().profile(module + ".executorInit")) { + module.executorInit(env, request, builder); + } } builder.addActionContext(new SymlinkTreeStrategy( env.getOutputService(), env.getBlazeWorkspace().getBinTools())); @@ -151,7 +155,9 @@ public class ExecutionTool { this.actionContextProviders = builder.getActionContextProviders(); for (ActionContextProvider provider : actionContextProviders) { - provider.init(fileCache); + try (SilentCloseable closeable = Profiler.instance().profile(provider + ".init")) { + provider.init(fileCache); + } } // There are many different SpawnActions, and we want to control the action context they use @@ -226,12 +232,16 @@ public class ExecutionTool { OutputService outputService = env.getOutputService(); ModifiedFileSet modifiedOutputFiles = ModifiedFileSet.EVERYTHING_MODIFIED; if (outputService != null) { - modifiedOutputFiles = - outputService.startBuild( - env.getReporter(), buildId, request.getBuildOptions().finalizeActions); + try (SilentCloseable c = Profiler.instance().profile("outputService.startBuild")) { + modifiedOutputFiles = + outputService.startBuild( + env.getReporter(), buildId, request.getBuildOptions().finalizeActions); + } } else { // TODO(bazel-team): this could be just another OutputService - startLocalOutputBuild(); + try (SilentCloseable c = Profiler.instance().profile("startLocalOutputBuild")) { + startLocalOutputBuild(); + } } // Must be created after the output path is created above. @@ -255,16 +265,22 @@ public class ExecutionTool { analysisResult.getConfigurationCollection().getTargetConfigurations()); String productName = runtime.getProductName(); String workspaceName = env.getWorkspaceName(); - OutputDirectoryLinksUtils.createOutputDirectoryLinks( - workspaceName, env.getWorkspace(), env.getDirectories().getExecRoot(workspaceName), - env.getDirectories().getOutputPath(workspaceName), getReporter(), targetConfigurations, - request.getBuildOptions().getSymlinkPrefix(productName), productName); + try (SilentCloseable c = + Profiler.instance().profile("OutputDirectoryLinksUtils.createOutputDirectoryLinks")) { + OutputDirectoryLinksUtils.createOutputDirectoryLinks( + workspaceName, env.getWorkspace(), env.getDirectories().getExecRoot(workspaceName), + env.getDirectories().getOutputPath(workspaceName), getReporter(), targetConfigurations, + request.getBuildOptions().getSymlinkPrefix(productName), productName); + } ActionCache actionCache = getActionCache(); actionCache.resetStatistics(); SkyframeExecutor skyframeExecutor = env.getSkyframeExecutor(); - Builder builder = createBuilder( - request, actionCache, skyframeExecutor, modifiedOutputFiles); + Builder builder; + try (SilentCloseable c = Profiler.instance().profile("createBuilder")) { + builder = createBuilder( + request, actionCache, skyframeExecutor, modifiedOutputFiles); + } // // Execution proper. All statements below are logically nested in @@ -272,7 +288,9 @@ public class ExecutionTool { // Collection<ConfiguredTarget> configuredTargets = buildResult.getActualTargets(); - env.getEventBus().post(new ExecutionStartingEvent(configuredTargets)); + try (SilentCloseable c = Profiler.instance().profile("ExecutionStartingEvent")) { + env.getEventBus().post(new ExecutionStartingEvent(configuredTargets)); + } getReporter().handle(Event.progress("Building...")); @@ -307,7 +325,10 @@ public class ExecutionTool { boolean buildCompleted = false; try { for (ActionContextProvider actionContextProvider : actionContextProviders) { - actionContextProvider.executionPhaseStarting(actionGraph, allArtifactsForProviders); + try (SilentCloseable c = + Profiler.instance().profile(actionContextProvider + ".executionPhaseStarting")) { + actionContextProvider.executionPhaseStarting(actionGraph, allArtifactsForProviders); + } } executor.executionPhaseStarting(); skyframeExecutor.drainChangedFiles(); @@ -315,11 +336,15 @@ public class ExecutionTool { if (request.getViewOptions().discardAnalysisCache || !skyframeExecutor.tracksStateForIncrementality()) { // Free memory by removing cache entries that aren't going to be needed. - env.getSkyframeBuildView() - .clearAnalysisCache(analysisResult.getTargetsToBuild(), analysisResult.getAspects()); + try (SilentCloseable c = Profiler.instance().profile("clearAnalysisCache")) { + env.getSkyframeBuildView() + .clearAnalysisCache(analysisResult.getTargetsToBuild(), analysisResult.getAspects()); + } } - configureResourceManager(request); + try (SilentCloseable c = Profiler.instance().profile("configureResourceManager")) { + configureResourceManager(request); + } Profiler.instance().markPhase(ProfilePhase.EXECUTE); @@ -411,7 +436,7 @@ public class ExecutionTool { Profiler.instance().markPhase(ProfilePhase.PREPARE); // Plant the symlink forest. - try { + try (SilentCloseable c = Profiler.instance().profile("plantSymlinkForest")) { new SymlinkForest( packageRootMap.get(), getExecRoot(), runtime.getProductName(), env.getWorkspaceName()) .plantSymlinkForest(); diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java index 797f3370b5..b49aae9ed1 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java @@ -37,6 +37,8 @@ import com.google.devtools.build.lib.buildtool.buildevent.ExecutionProgressRecei import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.packages.BuildFileNotFoundException; +import com.google.devtools.build.lib.profiler.Profiler; +import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.skyframe.ActionExecutionInactivityWatchdog; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey; @@ -116,8 +118,12 @@ public class SkyframeBuilder implements Builder { @Nullable Range<Long> lastExecutionTimeRange, TopLevelArtifactContext topLevelArtifactContext) throws BuildFailedException, AbruptExitException, TestExecException, InterruptedException { - skyframeExecutor.detectModifiedOutputFiles(modifiedOutputFiles, lastExecutionTimeRange); - skyframeExecutor.configureActionExecutor(fileCache, actionInputPrefetcher); + try (SilentCloseable c = Profiler.instance().profile("detectModifiedOutputFiles")) { + skyframeExecutor.detectModifiedOutputFiles(modifiedOutputFiles, lastExecutionTimeRange); + } + try (SilentCloseable c = Profiler.instance().profile("configureActionExecutor")) { + skyframeExecutor.configureActionExecutor(fileCache, actionInputPrefetcher); + } // Note that executionProgressReceiver accesses builtTargets concurrently (after wrapping in a // synchronized collection), so unsynchronized access to this variable is unsafe while it runs. ExecutionProgressReceiver executionProgressReceiver = diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java index 5c55d8309f..75c8d4bff5 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java @@ -32,6 +32,8 @@ import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable; import com.google.devtools.build.lib.events.PrintingEventHandler; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.events.StoredEventHandler; +import com.google.devtools.build.lib.profiler.Profiler; +import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy; import com.google.devtools.build.lib.util.AbruptExitException; import com.google.devtools.build.lib.util.AnsiStrippingOutputStream; @@ -466,7 +468,10 @@ public class BlazeCommandDispatcher { env.getEventBus().post(commonOptions.toolCommandLine); for (BlazeModule module : runtime.getBlazeModules()) { - env.getSkyframeExecutor().injectExtraPrecomputedValues(module.getPrecomputedValues()); + try (SilentCloseable closeable = + Profiler.instance().profile(module + ".injectExtraPrecomputedValues")) { + env.getSkyframeExecutor().injectExtraPrecomputedValues(module.getPrecomputedValues()); + } } result = command.exec(env, options); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java index 12276f4547..f073fda405 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java @@ -47,6 +47,7 @@ import com.google.devtools.build.lib.profiler.ProfilePhase; import com.google.devtools.build.lib.profiler.Profiler; import com.google.devtools.build.lib.profiler.Profiler.ProfiledTaskKinds; import com.google.devtools.build.lib.profiler.ProfilerTask; +import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment; import com.google.devtools.build.lib.query2.QueryEnvironmentFactory; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction; @@ -481,7 +482,9 @@ public final class BlazeRuntime { notifyCommandComplete(exitCode); for (BlazeModule module : blazeModules) { - module.afterCommand(); + try (SilentCloseable c = Profiler.instance().profile(module + ".afterCommand")) { + module.afterCommand(); + } } // Wipe the dependency graph if requested. Note that this method always runs at the end of diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java index 14b6c19c01..b217e93e58 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java @@ -21,6 +21,8 @@ import com.google.devtools.build.lib.exec.ExecutionOptions; import com.google.devtools.build.lib.exec.local.LocalExecutionOptions; import com.google.devtools.build.lib.pkgcache.LoadingOptions; import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; +import com.google.devtools.build.lib.profiler.Profiler; +import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.runtime.BlazeCommand; import com.google.devtools.build.lib.runtime.BlazeCommandResult; import com.google.devtools.build.lib.runtime.BlazeRuntime; @@ -65,13 +67,19 @@ public final class BuildCommand implements BlazeCommand { @Override public BlazeCommandResult exec(CommandEnvironment env, OptionsProvider options) { BlazeRuntime runtime = env.getRuntime(); - List<String> targets = ProjectFileSupport.getTargets(runtime.getProjectFileProvider(), options); + List<String> targets; + try (SilentCloseable closeable = Profiler.instance().profile("ProjectFileSupport.getTargets")) { + targets = ProjectFileSupport.getTargets(runtime.getProjectFileProvider(), options); + } - BuildRequest request = BuildRequest.create( - getClass().getAnnotation(Command.class).name(), options, - runtime.getStartupOptionsProvider(), - targets, - env.getReporter().getOutErr(), env.getCommandId(), env.getCommandStartTime()); + BuildRequest request; + try (SilentCloseable closeable = Profiler.instance().profile("BuildRequest.create")) { + request = BuildRequest.create( + getClass().getAnnotation(Command.class).name(), options, + runtime.getStartupOptionsProvider(), + targets, + env.getReporter().getOutErr(), env.getCommandId(), env.getCommandStartTime()); + } ExitCode exitCode = new BuildTool(env).processRequest(request, null).getExitCondition(); return BlazeCommandResult.exitCode(exitCode); } diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD index ae11fa47c3..49dfba69f4 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD +++ b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD @@ -28,6 +28,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/exec/apple", "//src/main/java/com/google/devtools/build/lib/exec/local", "//src/main/java/com/google/devtools/build/lib/exec/local:options", + "//src/main/java/com/google/devtools/build/lib/profiler", "//src/main/java/com/google/devtools/build/lib/shell", "//src/main/java/com/google/devtools/build/lib/standalone", "//src/main/java/com/google/devtools/build/lib/vfs", diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java index ce3c8a39c3..b0a7ed652a 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedSpawnRunner.java @@ -28,6 +28,8 @@ import com.google.devtools.build.lib.actions.UserExecException; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.exec.local.LocalEnvProvider; import com.google.devtools.build.lib.exec.local.PosixLocalEnvProvider; +import com.google.devtools.build.lib.profiler.Profiler; +import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.runtime.CommandEnvironment; import com.google.devtools.build.lib.shell.Command; import com.google.devtools.build.lib.shell.CommandException; @@ -67,7 +69,7 @@ final class LinuxSandboxedSpawnRunner extends AbstractSandboxSpawnRunner { File cwd = execRoot.getPathFile(); Command cmd = new Command(linuxSandboxArgv.toArray(new String[0]), env, cwd); - try { + try (SilentCloseable c = Profiler.instance().profile("LinuxSandboxedSpawnRunner.isSupported")) { cmd.execute(ByteStreams.nullOutputStream(), ByteStreams.nullOutputStream()); } catch (CommandException e) { return false; 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 b7c9386bc3..ac6e8d1496 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 @@ -119,6 +119,8 @@ import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator; import com.google.devtools.build.lib.pkgcache.TestFilter; import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader; import com.google.devtools.build.lib.profiler.AutoProfiler; +import com.google.devtools.build.lib.profiler.Profiler; +import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.skyframe.AspectValue.AspectValueKey; import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.FileDirtinessChecker; import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; @@ -1309,9 +1311,12 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { checkActive(); Preconditions.checkState(actionLogBufferPathGenerator != null); - skyframeActionExecutor.prepareForExecution( - reporter, executor, keepGoing, explain, actionCacheChecker, - finalizeActionsToOutputService ? outputService : null); + try (SilentCloseable c = + Profiler.instance().profile("skyframeActionExecutor.prepareForExecution")) { + skyframeActionExecutor.prepareForExecution( + reporter, executor, keepGoing, explain, actionCacheChecker, + finalizeActionsToOutputService ? outputService : null); + } resourceManager.resetResourceUsage(); try { |