diff options
author | janakr <janakr@google.com> | 2018-03-28 15:26:04 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-28 15:27:41 -0700 |
commit | 500e17be9da4c334c02b8e08f2d5c62254432178 (patch) | |
tree | 18baa9eff523797d6b949477da99a95ceff137ba /src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java | |
parent | 6d4f4f9e9278dd10f722adf7a5c02cfd5efee288 (diff) |
Allow ConfiguredTargetFunction to release its CPU-bound semaphore during dep requests if SkyframeExecutor has reason to believe that those requests may not be CPU-bound.
PiperOrigin-RevId: 190844728
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java index 61377b4e90..17ffe47c77 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java @@ -126,12 +126,15 @@ public final class ConfiguredTargetFunction implements SkyFunction { */ private final boolean storeTransitivePackagesForPackageRootResolution; + private final boolean shouldUnblockCpuWorkWhenFetchingDeps; + ConfiguredTargetFunction( BuildViewProvider buildViewProvider, RuleClassProvider ruleClassProvider, Semaphore cpuBoundSemaphore, Supplier<Boolean> removeActionsAfterEvaluation, boolean storeTransitivePackagesForPackageRootResolution, + boolean shouldUnblockCpuWorkWhenFetchingDeps, BuildOptions defaultBuildOptions) { this.buildViewProvider = buildViewProvider; this.ruleClassProvider = ruleClassProvider; @@ -139,12 +142,20 @@ public final class ConfiguredTargetFunction implements SkyFunction { this.removeActionsAfterEvaluation = Preconditions.checkNotNull(removeActionsAfterEvaluation); this.storeTransitivePackagesForPackageRootResolution = storeTransitivePackagesForPackageRootResolution; + this.shouldUnblockCpuWorkWhenFetchingDeps = shouldUnblockCpuWorkWhenFetchingDeps; this.defaultBuildOptions = defaultBuildOptions; } @Override public SkyValue compute(SkyKey key, Environment env) throws ConfiguredTargetFunctionException, InterruptedException { + if (shouldUnblockCpuWorkWhenFetchingDeps) { + env = + new StateInformingSkyFunctionEnvironment( + env, + /*preFetch=*/ cpuBoundSemaphore::release, + /*postFetch=*/ cpuBoundSemaphore::acquire); + } SkyframeBuildView view = buildViewProvider.getSkyframeBuildView(); NestedSetBuilder<Package> transitivePackagesForPackageRootResolution = storeTransitivePackagesForPackageRootResolution ? NestedSetBuilder.stableOrder() : null; |