From 54b9e13b982faed2aa5362fdd92fb626a74a913a Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 30 Apr 2012 22:42:03 +0200 Subject: [PATCH] out-of-process build option renamed. Added switch between server and serverless implementations --- .../compiler/CompileServerManager.java | 15 ++++--- .../intellij/compiler/impl/CompileDriver.java | 26 +++++------- .../impl/TranslatingCompilerFilesMonitor.java | 2 +- .../options/CompilerUIConfigurable.java | 2 +- .../compiler/server/BuildManager.java | 15 ++++--- .../CompilerWorkspaceConfiguration.java | 8 +++- .../intellij/debugger/ui/HotSwapUIImpl.java | 6 +-- .../src/misc/registry.properties | 40 ++++++++++++------- 8 files changed, 60 insertions(+), 54 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index 3091e76e83d9..fb0c2e87e11d 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -17,7 +17,6 @@ package com.intellij.compiler; import com.intellij.ProjectTopics; import com.intellij.application.options.PathMacrosImpl; -import com.intellij.compiler.impl.CompileDriver; import com.intellij.compiler.server.impl.CompileServerClasspathManager; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.GeneralCommandLine; @@ -164,7 +163,7 @@ public class CompileServerManager implements ApplicationComponent{ } private boolean shouldTriggerMake(List events) { - if (!CompileDriver.runOutOfProcessMakeAsServer()) { + if (CompilerWorkspaceConfiguration.useServerlessOutOfProcessBuild()) { return false; } for (VFileEvent event : events) { @@ -295,7 +294,7 @@ public class CompileServerManager implements ApplicationComponent{ continue; } final CompilerWorkspaceConfiguration config = CompilerWorkspaceConfiguration.getInstance(project); - if (!config.useCompileServer() || !config.MAKE_PROJECT_ON_SAVE) { + if (!config.useOutOfProcessBuild() || !config.MAKE_PROJECT_ON_SAVE) { continue; } final RequestFuture future = submitCompilationTask(project, false, true, Collections.emptyList(), Collections.emptyList(), @@ -584,7 +583,7 @@ public class CompileServerManager implements ApplicationComponent{ cmdLine.addParameter("-server"); cmdLine.addParameter("-XX:MaxPermSize=150m"); cmdLine.addParameter("-XX:ReservedCodeCacheSize=64m"); - cmdLine.addParameter("-Xmx" + Registry.intValue("compiler.server.heap.size") + "m"); + cmdLine.addParameter("-Xmx" + Registry.intValue("compiler.process.heap.size") + "m"); cmdLine.addParameter("-Djava.awt.headless=true"); final String shouldGenerateIndex = System.getProperty(GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION); @@ -601,7 +600,7 @@ public class CompileServerManager implements ApplicationComponent{ cmdLine.addParameter("-D" + GlobalOptions.MAX_SIMULTANEOUS_BUILDS_OPTION + "=" + maxBuilds); } - final String additionalOptions = Registry.stringValue("compiler.server.vm.options"); + final String additionalOptions = Registry.stringValue("compiler.process.vm.options"); if (!StringUtil.isEmpty(additionalOptions)) { final StringTokenizer tokenizer = new StringTokenizer(additionalOptions, " ", false); while (tokenizer.hasMoreTokens()) { @@ -610,16 +609,16 @@ public class CompileServerManager implements ApplicationComponent{ } // debugging - final int debugPort = Registry.intValue("compiler.server.debug.port"); + final int debugPort = Registry.intValue("compiler.process.debug.port"); if (debugPort > 0) { cmdLine.addParameter("-XX:+HeapDumpOnOutOfMemoryError"); cmdLine.addParameter("-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=" + debugPort); } - if (Registry.is("compiler.server.use.memory.temp.cache")) { + if (Registry.is("compiler.process.use.memory.temp.cache")) { cmdLine.addParameter("-D"+ GlobalOptions.USE_MEMORY_TEMP_CACHE_OPTION); } - if (Registry.is("compiler.server.use.external.javac.process")) { + if (Registry.is("compiler.process.use.external.javac")) { cmdLine.addParameter("-D"+ GlobalOptions.USE_EXTERNAL_JAVAC_OPTION); } cmdLine.addParameter("-D"+ GlobalOptions.HOSTNAME_OPTION + "=" + NetUtils.getLocalHostString()); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index a26e3ab64ea4..6c32c762ce30 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -108,12 +108,6 @@ public class CompileDriver { // to be used in tests only for debug output public static volatile boolean ourDebugMode = false; - // todo: temp option - private static final boolean OUT_OF_PROCESS_MAKE_AS_SERVER = true; // out-of-process make implementation switch (server / per-project build process) - public static boolean runOutOfProcessMakeAsServer() { - return OUT_OF_PROCESS_MAKE_AS_SERVER; - } - private final Project myProject; private final Map, Pair> myGenerationCompilerModuleToOutputDirMap; // [IntermediateOutputCompiler, Module] -> [ProductionSources, TestSources] private final String myCachesDirectoryPath; @@ -161,7 +155,7 @@ public class CompileDriver { myGenerationCompilerModuleToOutputDirMap = new HashMap, Pair>(); - if (!useCompileServer()) { + if (!useOutOfProcessBuild()) { final LocalFileSystem lfs = LocalFileSystem.getInstance(); final IntermediateOutputCompiler[] generatingCompilers = CompilerManager.getInstance(myProject).getCompilers(IntermediateOutputCompiler.class, myCompilerFilter); final Module[] allModules = ModuleManager.getInstance(myProject).getModules(); @@ -193,12 +187,12 @@ public class CompileDriver { public void rebuild(CompileStatusNotification callback) { CompileScope projectScope = ArtifactCompileScope.createScopeWithArtifacts(new ProjectCompileScope(myProject), ArtifactUtil.getArtifactWithOutputPaths(myProject), false); - final CompileScope compileScope = useCompileServer() ? projectScope : addAdditionalRoots(projectScope, ALL_EXCEPT_SOURCE_PROCESSING); + final CompileScope compileScope = useOutOfProcessBuild() ? projectScope : addAdditionalRoots(projectScope, ALL_EXCEPT_SOURCE_PROCESSING); doRebuild(callback, null, true, compileScope); } public void make(CompileScope scope, CompileStatusNotification callback) { - if (!useCompileServer()) { + if (!useOutOfProcessBuild()) { scope = addAdditionalRoots(scope, ALL_EXCEPT_SOURCE_PROCESSING); } if (validateCompilerConfiguration(scope, false)) { @@ -454,7 +448,7 @@ public class CompileDriver { final MessageBus messageBus = myProject.getMessageBus(); - if (OUT_OF_PROCESS_MAKE_AS_SERVER) { + if (!CompilerWorkspaceConfiguration.useServerlessOutOfProcessBuild()) { final CompileServerManager csManager = CompileServerManager.getInstance(); csManager.cancelAutoMakeTasks(myProject); return csManager.submitCompilationTask(myProject, compileContext.isRebuild(), compileContext.isMake(), moduleNames, artifactNames, paths, @@ -649,7 +643,7 @@ public class CompileDriver { final boolean checkCachesVersion) { ApplicationManager.getApplication().assertIsDispatchThread(); - final boolean useServer = useCompileServer(); + final boolean useServer = useOutOfProcessBuild(); final String contentName = forceCompile ? CompilerBundle.message("compiler.content.name.compile") : CompilerBundle.message("compiler.content.name.make"); @@ -694,7 +688,7 @@ public class CompileDriver { if (myProject.isDisposed()) { return; } - LOG.info("COMPILATION STARTED " + (OUT_OF_PROCESS_MAKE_AS_SERVER? "(COMPILE SERVER)" : "(BUILD PROCESS)")); + LOG.info("COMPILATION STARTED " + (CompilerWorkspaceConfiguration.useServerlessOutOfProcessBuild() ? "(BUILD PROCESS)" : "(COMPILE SERVER)")); if (message != null) { compileContext.addMessage(message); } @@ -720,7 +714,7 @@ public class CompileDriver { finally { final long finish = System.currentTimeMillis(); CompilerUtil.logDuration( - "\tCOMPILATION FINISHED " + (OUT_OF_PROCESS_MAKE_AS_SERVER? "(COMPILE SERVER)" : "(BUILD PROCESS)") + "; Errors: " + + "\tCOMPILATION FINISHED " + (CompilerWorkspaceConfiguration.useServerlessOutOfProcessBuild() ? "(BUILD PROCESS)" : "(COMPILE SERVER)") + "; Errors: " + compileContext.getMessageCount(CompilerMessageCategory.ERROR) + "; warnings: " + compileContext.getMessageCount(CompilerMessageCategory.WARNING), @@ -2310,7 +2304,7 @@ public class CompileDriver { } private boolean validateCompilerConfiguration(final CompileScope scope, boolean checkOutputAndSourceIntersection) { - if (useCompileServer()) { + if (useOutOfProcessBuild()) { return true; } try { @@ -2504,8 +2498,8 @@ public class CompileDriver { } } - private boolean useCompileServer() { - return CompilerWorkspaceConfiguration.getInstance(myProject).useCompileServer(); + private boolean useOutOfProcessBuild() { + return CompilerWorkspaceConfiguration.getInstance(myProject).useOutOfProcessBuild(); } private void showCyclicModulesHaveDifferentLanguageLevel(Module[] modulesInChunk) { diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java index ce11322019fd..9ab4feeadd88 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java @@ -1300,7 +1300,7 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { final ProjectRef projRef = new ProjectRef(project); final int projectId = getProjectId(project); - if (CompilerWorkspaceConfiguration.getInstance(project).useCompileServer()) { + if (CompilerWorkspaceConfiguration.getInstance(project).useOutOfProcessBuild()) { suspendProject(project); } else { diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java index 5df19dd82f48..f713c9d94977 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java @@ -49,7 +49,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura public CompilerUIConfigurable(final Project project) { myProject = project; - final boolean isServerOptionEnabled = Registry.is("compiler.server.enabled") || ApplicationManager.getApplication().isInternal(); + final boolean isServerOptionEnabled = Registry.is("compiler.out-of-process.build.enabled") || ApplicationManager.getApplication().isInternal(); myCbUseCompileServer.setVisible(isServerOptionEnabled); myCbMakeProjectOnSave.setVisible(isServerOptionEnabled); diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 4ea275f38e0c..6afc7fffc76d 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -18,7 +18,6 @@ package com.intellij.compiler.server; import com.intellij.ProjectTopics; import com.intellij.application.options.PathMacrosImpl; import com.intellij.compiler.CompilerWorkspaceConfiguration; -import com.intellij.compiler.impl.CompileDriver; import com.intellij.compiler.server.impl.CompileServerClasspathManager; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.GeneralCommandLine; @@ -175,7 +174,7 @@ public class BuildManager implements ApplicationComponent{ } private boolean shouldTriggerMake(List events) { - if (CompileDriver.runOutOfProcessMakeAsServer()) { + if (!CompilerWorkspaceConfiguration.useServerlessOutOfProcessBuild()) { return false; } for (VFileEvent event : events) { @@ -274,7 +273,7 @@ public class BuildManager implements ApplicationComponent{ continue; } final CompilerWorkspaceConfiguration config = CompilerWorkspaceConfiguration.getInstance(project); - if (!config.useCompileServer() || !config.MAKE_PROJECT_ON_SAVE) { + if (!config.useOutOfProcessBuild() || !config.MAKE_PROJECT_ON_SAVE) { continue; } final List emptyList = Collections.emptyList(); @@ -580,7 +579,7 @@ public class BuildManager implements ApplicationComponent{ cmdLine.addParameter("-server"); cmdLine.addParameter("-XX:MaxPermSize=150m"); cmdLine.addParameter("-XX:ReservedCodeCacheSize=64m"); - cmdLine.addParameter("-Xmx" + Registry.intValue("compiler.server.heap.size") + "m"); + cmdLine.addParameter("-Xmx" + Registry.intValue("compiler.process.heap.size") + "m"); cmdLine.addParameter("-Djava.awt.headless=true"); final String shouldGenerateIndex = System.getProperty(GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION); @@ -588,7 +587,7 @@ public class BuildManager implements ApplicationComponent{ cmdLine.addParameter("-D"+ GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION +"=" + shouldGenerateIndex); } - final String additionalOptions = Registry.stringValue("compiler.server.vm.options"); + final String additionalOptions = Registry.stringValue("compiler.process.vm.options"); if (!StringUtil.isEmpty(additionalOptions)) { final StringTokenizer tokenizer = new StringTokenizer(additionalOptions, " ", false); while (tokenizer.hasMoreTokens()) { @@ -597,16 +596,16 @@ public class BuildManager implements ApplicationComponent{ } // debugging - final int debugPort = Registry.intValue("compiler.server.debug.port"); + final int debugPort = Registry.intValue("compiler.process.debug.port"); if (debugPort > 0) { cmdLine.addParameter("-XX:+HeapDumpOnOutOfMemoryError"); cmdLine.addParameter("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=" + debugPort); } - if (Registry.is("compiler.server.use.memory.temp.cache")) { + if (Registry.is("compiler.process.use.memory.temp.cache")) { cmdLine.addParameter("-D"+ GlobalOptions.USE_MEMORY_TEMP_CACHE_OPTION); } - if (Registry.is("compiler.server.use.external.javac.process")) { + if (Registry.is("compiler.process.use.external.javac")) { cmdLine.addParameter("-D"+ GlobalOptions.USE_EXTERNAL_JAVAC_OPTION); } final String host = NetUtils.getLocalHostString(); diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java index 09bd07941970..3ac9cd96bb25 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java @@ -56,7 +56,11 @@ public class CompilerWorkspaceConfiguration implements PersistentStateComponent< XmlSerializerUtil.copyBean(state, this); } - public boolean useCompileServer() { - return USE_COMPILE_SERVER && (Registry.is("compiler.server.enabled") || ApplicationManager.getApplication().isInternal()); + public boolean useOutOfProcessBuild() { + return USE_COMPILE_SERVER && (Registry.is("compiler.out-of-process.build.enabled") || ApplicationManager.getApplication().isInternal()); + } + + public static boolean useServerlessOutOfProcessBuild() { + return !Registry.is("compiler.out-of-process.as-server"); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java index 8bba27183110..822978d98c98 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java @@ -146,15 +146,15 @@ public class HotSwapUIImpl extends HotSwapUI implements ProjectComponent{ return; } - final boolean isServerMode = CompilerWorkspaceConfiguration.getInstance(myProject).useCompileServer(); - final boolean shouldPerformScan = !isServerMode || generatedPaths == null; + final boolean isOutOfProcessMode = CompilerWorkspaceConfiguration.getInstance(myProject).useOutOfProcessBuild(); + final boolean shouldPerformScan = !isOutOfProcessMode || generatedPaths == null; final HotSwapProgressImpl findClassesProgress = shouldPerformScan ? new HotSwapProgressImpl(myProject) : null; ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { final Map> modifiedClasses = shouldPerformScan? - scanForModifiedClassesWithProgress(sessions, findClassesProgress, !isServerMode) : + scanForModifiedClassesWithProgress(sessions, findClassesProgress, !isOutOfProcessMode) : HotSwapManager.findModifiedClasses(sessions, generatedPaths); final Application application = ApplicationManager.getApplication(); diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 116ed60b3c15..a9a26274e7b3 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -130,29 +130,39 @@ compiler.perform.outputs.refresh.on.start.description=Whether to perform initial compiler.max.static.constants.searches=3000 compiler.max.static.constants.searches.description=If the number of changed compile time constants exceeds this value, make will start full-project rebuild -compiler.server.enabled=false -compiler.server.enabled.description=Enable out-of-process compilation +# out-of-process build parameters -compiler.server.heap.size=300 -compiler.server.heap.size.description=Heap size value in MB for the compile server process +compiler.out-of-process.build.enabled=false +compiler.out-of-process.build.enabled.description=Enable out-of-process compilation +compiler.out-of-process.as-server=true +compiler.out-of-process.as-server.description=Use implementation of out-of-process build as server process + +compiler.process.heap.size=300 +compiler.process.heap.size.description=Heap size value in MB for the compile server process + +compiler.process.vm.options=-ea +compiler.process.vm.options.description=Additional options for compile server's VM + +compiler.process.use.memory.temp.cache=true +compiler.process.use.memory.temp.cache.description=Store temporary data in memory for faster compilation; requires larger server heap size + +compiler.process.use.external.javac=true +compiler.process.use.external.javac.description=Run javac compiler in a separate process (allows to run build process with smaller heap size) + +compiler.process.debug.port=-1 +#compiler.server.javac.debug.port=-1 + + +# parameters specific to server implementation compiler.server.max.simultaneous.builds=1 compiler.server.max.simultaneous.builds.description=The max number of simultaneous build sessions. Increasing this value may require larger server heap size -compiler.server.vm.options=-ea -compiler.server.vm.options.description=Additional options for compile server's VM - -compiler.server.use.memory.temp.cache=true -compiler.server.use.memory.temp.cache.description=Store temporary data in memory for faster compilation; requires larger server heap size - -compiler.server.use.external.javac.process=true -compiler.server.use.external.javac.process.description=Run javac compiler in external process (allows to run compile server with smaller heap size) - compiler.server.ping.interval=5 compiler.server.ping.interval.description=Interval in seconds between ping requests the IDE periodically sends to server. If server does not receive pings for some time, it shuts down. Specify -1 to disable this feature. -compiler.server.debug.port=-1 -#compiler.server.javac.debug.port=-1 +# end of out-of-process build parameters + vcs.show.colored.annotations=true vcs.showConsole=true