aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/standalone
diff options
context:
space:
mode:
authorGravatar ulfjack <ulfjack@google.com>2018-06-11 07:01:48 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-11 07:02:58 -0700
commit65173666790d6fff0190c196536d34743b419c12 (patch)
treeb16cba3ef9419c4fb8ce6fd2cc775696cf8727ce /src/main/java/com/google/devtools/build/lib/standalone
parent4cf2ebdcef7b5d4c46e533a560642b89eb3f02a5 (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.java86
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java56
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);
+ }
}