diff options
author | ulfjack <ulfjack@google.com> | 2018-06-11 07:01:48 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-11 07:02:58 -0700 |
commit | 65173666790d6fff0190c196536d34743b419c12 (patch) | |
tree | b16cba3ef9419c4fb8ce6fd2cc775696cf8727ce /src/main/java/com/google/devtools/build/lib/standalone | |
parent | 4cf2ebdcef7b5d4c46e533a560642b89eb3f02a5 (diff) |
Inline some ActionContextProvider classes into their modules
This also gets rid of some boilerplate. The ExecutionTool.addActionContext
method has been around for a while, but is underused.
There are still a few ActionContextProvider implementations left, which are
implementing other functionality besides adding action contexts.
As a side effect, this change reduces null build time with a hot server on
linux by about a quarter. We were running the linux sandbox twice on every
build, which takes about 70ms each (on my machine), with the total null build
time around 300ms.
PiperOrigin-RevId: 200045145
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/standalone')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java | 86 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java | 56 |
2 files changed, 55 insertions, 87 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java deleted file mode 100644 index 2b1c6fd7ef..0000000000 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2014 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.devtools.build.lib.standalone; - -import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.actions.ActionContext; -import com.google.devtools.build.lib.actions.ResourceManager; -import com.google.devtools.build.lib.analysis.test.TestActionContext; -import com.google.devtools.build.lib.exec.ActionContextProvider; -import com.google.devtools.build.lib.exec.ExecutionOptions; -import com.google.devtools.build.lib.exec.FileWriteStrategy; -import com.google.devtools.build.lib.exec.SpawnRunner; -import com.google.devtools.build.lib.exec.StandaloneTestStrategy; -import com.google.devtools.build.lib.exec.TestStrategy; -import com.google.devtools.build.lib.exec.apple.XcodeLocalEnvProvider; -import com.google.devtools.build.lib.exec.local.LocalEnvProvider; -import com.google.devtools.build.lib.exec.local.LocalExecutionOptions; -import com.google.devtools.build.lib.exec.local.LocalSpawnRunner; -import com.google.devtools.build.lib.exec.local.PosixLocalEnvProvider; -import com.google.devtools.build.lib.exec.local.WindowsLocalEnvProvider; -import com.google.devtools.build.lib.rules.cpp.SpawnGccStrategy; -import com.google.devtools.build.lib.rules.test.ExclusiveTestStrategy; -import com.google.devtools.build.lib.runtime.CommandEnvironment; -import com.google.devtools.build.lib.util.OS; -import com.google.devtools.build.lib.vfs.Path; - -/** - * Provide a standalone, local execution context. - */ -public class StandaloneActionContextProvider extends ActionContextProvider { - private final CommandEnvironment env; - - public StandaloneActionContextProvider(CommandEnvironment env) { - this.env = env; - } - - @Override - public Iterable<? extends ActionContext> getActionContexts() { - ExecutionOptions executionOptions = env.getOptions().getOptions(ExecutionOptions.class); - Path testTmpRoot = - TestStrategy.getTmpRoot(env.getWorkspace(), env.getExecRoot(), executionOptions); - - TestActionContext testStrategy = - new StandaloneTestStrategy( - executionOptions, - env.getBlazeWorkspace().getBinTools(), - testTmpRoot); - // Order of strategies passed to builder is significant - when there are many strategies that - // could potentially be used and a spawnActionContext doesn't specify which one it wants, the - // last one from strategies list will be used - return ImmutableList.of( - new StandaloneSpawnStrategy(env.getExecRoot(), createLocalRunner(env)), - new SpawnGccStrategy(), - testStrategy, - new ExclusiveTestStrategy(testStrategy), - new FileWriteStrategy()); - } - - private static SpawnRunner createLocalRunner(CommandEnvironment env) { - LocalExecutionOptions localExecutionOptions = - env.getOptions().getOptions(LocalExecutionOptions.class); - LocalEnvProvider localEnvProvider = - OS.getCurrent() == OS.DARWIN - ? new XcodeLocalEnvProvider(env.getClientEnv()) - : (OS.getCurrent() == OS.WINDOWS - ? new WindowsLocalEnvProvider(env.getClientEnv()) - : new PosixLocalEnvProvider(env.getClientEnv())); - return - new LocalSpawnRunner( - env.getExecRoot(), - localExecutionOptions, - ResourceManager.instance(), - localEnvProvider); - } -} diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java index 728dc4b6d7..2f7a97b8da 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java +++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java @@ -13,11 +13,28 @@ // limitations under the License. package com.google.devtools.build.lib.standalone; +import com.google.devtools.build.lib.actions.ResourceManager; import com.google.devtools.build.lib.actions.SpawnActionContext; +import com.google.devtools.build.lib.analysis.test.TestActionContext; import com.google.devtools.build.lib.buildtool.BuildRequest; +import com.google.devtools.build.lib.exec.ExecutionOptions; import com.google.devtools.build.lib.exec.ExecutorBuilder; +import com.google.devtools.build.lib.exec.FileWriteStrategy; +import com.google.devtools.build.lib.exec.SpawnRunner; +import com.google.devtools.build.lib.exec.StandaloneTestStrategy; +import com.google.devtools.build.lib.exec.TestStrategy; +import com.google.devtools.build.lib.exec.apple.XcodeLocalEnvProvider; +import com.google.devtools.build.lib.exec.local.LocalEnvProvider; +import com.google.devtools.build.lib.exec.local.LocalExecutionOptions; +import com.google.devtools.build.lib.exec.local.LocalSpawnRunner; +import com.google.devtools.build.lib.exec.local.PosixLocalEnvProvider; +import com.google.devtools.build.lib.exec.local.WindowsLocalEnvProvider; +import com.google.devtools.build.lib.rules.cpp.SpawnGccStrategy; +import com.google.devtools.build.lib.rules.test.ExclusiveTestStrategy; import com.google.devtools.build.lib.runtime.BlazeModule; import com.google.devtools.build.lib.runtime.CommandEnvironment; +import com.google.devtools.build.lib.util.OS; +import com.google.devtools.build.lib.vfs.Path; /** * StandaloneModule provides pluggable functionality for blaze. @@ -25,8 +42,28 @@ import com.google.devtools.build.lib.runtime.CommandEnvironment; public class StandaloneModule extends BlazeModule { @Override public void executorInit(CommandEnvironment env, BuildRequest request, ExecutorBuilder builder) { - builder.addActionContextProvider(new StandaloneActionContextProvider(env)); + // TODO(ulfjack): Move this to another module. builder.addActionContextProvider(new DummyIncludeScanningContextProvider(env)); + + ExecutionOptions executionOptions = env.getOptions().getOptions(ExecutionOptions.class); + Path testTmpRoot = + TestStrategy.getTmpRoot(env.getWorkspace(), env.getExecRoot(), executionOptions); + TestActionContext testStrategy = + new StandaloneTestStrategy( + executionOptions, + env.getBlazeWorkspace().getBinTools(), + testTmpRoot); + + // Order of strategies passed to builder is significant - when there are many strategies that + // could potentially be used and a spawnActionContext doesn't specify which one it wants, the + // last one from strategies list will be used + builder.addActionContext( + new StandaloneSpawnStrategy(env.getExecRoot(), createLocalRunner(env))); + builder.addActionContext(new SpawnGccStrategy()); + builder.addActionContext(testStrategy); + builder.addActionContext(new ExclusiveTestStrategy(testStrategy)); + builder.addActionContext(new FileWriteStrategy()); + // This makes the "sandboxed" strategy the default Spawn strategy, unless it is overridden by a // later BlazeModule. builder.addStrategyByMnemonic("", "standalone"); @@ -35,4 +72,21 @@ public class StandaloneModule extends BlazeModule { // necessarily the default. builder.addStrategyByContext(SpawnActionContext.class, "standalone"); } + + private static SpawnRunner createLocalRunner(CommandEnvironment env) { + LocalExecutionOptions localExecutionOptions = + env.getOptions().getOptions(LocalExecutionOptions.class); + LocalEnvProvider localEnvProvider = + OS.getCurrent() == OS.DARWIN + ? new XcodeLocalEnvProvider(env.getClientEnv()) + : (OS.getCurrent() == OS.WINDOWS + ? new WindowsLocalEnvProvider(env.getClientEnv()) + : new PosixLocalEnvProvider(env.getClientEnv())); + return + new LocalSpawnRunner( + env.getExecRoot(), + localExecutionOptions, + ResourceManager.instance(), + localEnvProvider); + } } |