From 1d899604614c63a79a22c67b4cf2cb6583f2f463 Mon Sep 17 00:00:00 2001 From: Janak Ramakrishnan Date: Thu, 28 Apr 2016 03:48:55 +0000 Subject: Precompute defaults package content to save ~milliseconds every time BlazeRuntime#getDefaultsPackageContent is called. Thanks to nharmata for the suggestion. -- MOS_MIGRATED_REVID=120984951 --- .../devtools/build/lib/runtime/BlazeRuntime.java | 6 +++- .../BlazeCommandDispatcherRcoptionsTest.java | 34 ++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) (limited to 'src') 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 a8bd37e6d7..25f38d5fd2 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 @@ -153,6 +153,7 @@ public final class BlazeRuntime { private final ProjectFile.Provider projectFileProvider; @Nullable private final InvocationPolicy invocationPolicy; + private final String defaultsPackageContent; private final QueryEnvironmentFactory queryEnvironmentFactory; private final SubscriberExceptionHandler eventBusExceptionHandler; @@ -181,6 +182,9 @@ public final class BlazeRuntime { this.startupOptionsProvider = startupOptionsProvider; this.queryEnvironmentFactory = queryEnvironmentFactory; this.eventBusExceptionHandler = eventBusExceptionHandler; + + this.defaultsPackageContent = + ruleClassProvider.getDefaultsPackageContent(getInvocationPolicy()); } private static InvocationPolicy createInvocationPolicyFromModules( @@ -578,7 +582,7 @@ public final class BlazeRuntime { * defaults package, which will not be reflected here. */ public String getDefaultsPackageContent() { - return ruleClassProvider.getDefaultsPackageContent(getInvocationPolicy()); + return defaultsPackageContent; } /** diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java index 1c757a3021..ad2d864a33 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java @@ -17,13 +17,20 @@ import static org.junit.Assert.assertEquals; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfigurationCollectionFactory; +import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; +import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.ConfigurationFactory; +import com.google.devtools.build.lib.analysis.config.FragmentOptions; +import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.runtime.BlazeCommandDispatcher.LockingMode; import com.google.devtools.build.lib.runtime.BlazeCommandDispatcher.ShutdownBlazeServerException; +import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass; import com.google.devtools.build.lib.testutil.Scratch; import com.google.devtools.build.lib.util.ExitCode; import com.google.devtools.build.lib.util.io.RecordingOutErr; @@ -39,6 +46,8 @@ import org.junit.runners.JUnit4; import org.mockito.Mockito; import java.util.List; +import java.util.Map; +import java.util.Set; /** * Tests the handling of rc-options in {@link BlazeCommandDispatcher}. @@ -129,6 +138,17 @@ public class BlazeCommandDispatcherRcoptionsTest { OptionsParser.newOptionsParser(BlazeServerStartupOptions.class)) .setConfigurationFactory( new ConfigurationFactory(Mockito.mock(ConfigurationCollectionFactory.class))) + .addBlazeModule( + new BlazeModule() { + @Override + public void initializeRuleClasses(ConfiguredRuleClassProvider.Builder builder) { + // We must add these options so that the defaults package can be created. + builder.addConfigurationOptions(BuildConfiguration.Options.class); + // The defaults package asserts that it is not empty, so we provide options. + builder.addConfigurationOptions(MockFragmentOptions.class); + } + }) + .setInvocationPolicy(InvocationPolicyOuterClass.InvocationPolicy.getDefaultInstance()) .build(); } @@ -270,4 +290,18 @@ public class BlazeCommandDispatcherRcoptionsTest { out); } } + + /** Options class for testing, so that defaults package has some content. */ + public static class MockFragmentOptions extends FragmentOptions { + public MockFragmentOptions() {} + + @Option(name = "fake_opt", defaultValue = "false") + public boolean fakeOpt; + + @Override + public Map> getDefaultsLabels(BuildConfiguration.Options commonOptions) { + return ImmutableMap.>of( + "mock_target", ImmutableSet.of(Label.parseAbsoluteUnchecked("//mock:target"))); + } + } } -- cgit v1.2.3