Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rapicault2008-10-25 18:58:46 +0000
committerPascal Rapicault2008-10-25 18:58:46 +0000
commit09acc71c2907e1dcf2f4cd1780827263ad07a264 (patch)
tree834244c2d312dc6d3ce0a536511d622bbbffaee1
parent4769fe025aa6c7bd2633b2bdc5189930ce7b82e8 (diff)
downloadrt.equinox.p2-09acc71c2907e1dcf2f4cd1780827263ad07a264.tar.gz
rt.equinox.p2-09acc71c2907e1dcf2f4cd1780827263ad07a264.tar.xz
rt.equinox.p2-09acc71c2907e1dcf2f4cd1780827263ad07a264.zip
Bug 246444 - Complete for Eclipse phase of install/update is very slow on 1GB mem machines
-rw-r--r--bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java47
1 files changed, 39 insertions, 8 deletions
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
index dda2c4f2f..a0fbc7f02 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
@@ -12,6 +12,7 @@ import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
+import java.util.WeakHashMap;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.ActionFactory;
@@ -30,6 +31,7 @@ public class EclipseTouchpoint extends Touchpoint {
// TODO: phase id constants should be defined elsewhere.
public static final String INSTALL_PHASE_ID = "install"; //$NON-NLS-1$
public static final String UNINSTALL_PHASE_ID = "uninstall"; //$NON-NLS-1$
+ public static final String CONFIGURE_PHASE_ID = "configure"; //$NON-NLS-1$
public static final String PROFILE_PROP_LAUNCHER_NAME = "eclipse.touchpoint.launcherName"; //$NON-NLS-1$
public static final String PARM_MANIPULATOR = "manipulator"; //$NON-NLS-1$
@@ -38,14 +40,43 @@ public class EclipseTouchpoint extends Touchpoint {
public static final String PARM_IU = "iu"; //$NON-NLS-1$
public static final String PARM_INSTALL_FOLDER = "installFolder"; //$NON-NLS-1$
- public IStatus completePhase(IProgressMonitor monitor, IProfile profile, String phaseId, Map touchpointParameters) {
- Manipulator manipulator = (Manipulator) touchpointParameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
- try {
+ private static Map manipulators = new WeakHashMap();
+
+ private static synchronized LazyManipulator getManipulator(IProfile profile) {
+ LazyManipulator manipulator = (LazyManipulator) manipulators.get(profile);
+ if (manipulator == null) {
+ manipulator = new LazyManipulator(profile);
+ manipulators.put(profile, manipulator);
+ }
+ return manipulator;
+ }
+
+ private static synchronized void saveManipulator(IProfile profile) throws FrameworkAdminRuntimeException, IOException {
+ LazyManipulator manipulator = (LazyManipulator) manipulators.remove(profile);
+ if (manipulator != null)
manipulator.save(false);
- } catch (RuntimeException e) {
- return Util.createError(Messages.error_saving_manipulator, e);
- } catch (IOException e) {
- return Util.createError(Messages.error_saving_manipulator, e);
+ }
+
+ public static final boolean WRITE_ONCE = !"false".equals(org.eclipse.equinox.internal.p2.touchpoint.eclipse.Activator.getContext().getProperty("eclipse.p2.eclipseTouchpoint.writeOnce")); //$NON-NLS-1$//$NON-NLS-2$
+
+ public IStatus completePhase(IProgressMonitor monitor, IProfile profile, String phaseId, Map touchpointParameters) {
+ if (!WRITE_ONCE) {
+ Manipulator manipulator = (Manipulator) touchpointParameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
+ try {
+ manipulator.save(false);
+ } catch (RuntimeException e) {
+ return Util.createError(Messages.error_saving_manipulator, e);
+ } catch (IOException e) {
+ return Util.createError(Messages.error_saving_manipulator, e);
+ }
+ } else if (CONFIGURE_PHASE_ID.equals(phaseId)) {
+ try {
+ saveManipulator(profile);
+ } catch (RuntimeException e) {
+ return Util.createError(Messages.error_saving_manipulator, e);
+ } catch (IOException e) {
+ return Util.createError(Messages.error_saving_manipulator, e);
+ }
}
if (INSTALL_PHASE_ID.equals(phaseId) || UNINSTALL_PHASE_ID.equals(phaseId)) {
@@ -78,7 +109,7 @@ public class EclipseTouchpoint extends Touchpoint {
public IStatus initializePhase(IProgressMonitor monitor, IProfile profile, String phaseId, Map touchpointParameters) {
touchpointParameters.put(PARM_INSTALL_FOLDER, Util.getInstallFolder(profile));
- LazyManipulator manipulator = new LazyManipulator(profile);
+ LazyManipulator manipulator = getManipulator(profile);
touchpointParameters.put(PARM_MANIPULATOR, manipulator);
touchpointParameters.put(PARM_SOURCE_BUNDLES, new SourceManipulator(profile));
File configLocation = Util.getConfigurationFolder(profile);

Back to the top