Author: jm
Date: 2012-04-12 14:09:32 -0700 (Thu, 12 Apr 2012)
New Revision: 28810
Modified:
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DingRenderingEngineFactory.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/ViewTaskFactoryListener.java
core3/impl/trunk/presentation-impl/src/main/java/org/cytoscape/view/presentation/internal/RenderingEngineManagerImpl.java
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualMappingManagerImpl.java
Log:
References #628: Fixed some memory leaks involving DGraphView. Many others
remain.
Modified:
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
===================================================================
---
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
2012-04-12 21:05:20 UTC (rev 28809)
+++
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
2012-04-12 21:09:32 UTC (rev 28810)
@@ -118,6 +118,10 @@
boolean changed = false;
synchronized (this) {
+ List<CyNetwork> removals = new LinkedList<CyNetwork>();
+ removals.add(toBeDestroyed);
+ selectedNetworks.removeAll(removals);
+
if (toBeDestroyed == currentNetwork) {
changed = true;
currentNetwork = null;
@@ -159,6 +163,10 @@
boolean changed = false;
synchronized (this) {
+ List<CyNetworkView> removals = new
LinkedList<CyNetworkView>();
+ removals.add(toBeDestroyed);
+ selectedNetworkViews.removeAll(removals);
+
if (toBeDestroyed == currentNetworkView) {
changed = true;
currentNetworkView = null;
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DingRenderingEngineFactory.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DingRenderingEngineFactory.java
2012-04-12 21:05:20 UTC (rev 28809)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DingRenderingEngineFactory.java
2012-04-12 21:09:32 UTC (rev 28810)
@@ -2,6 +2,8 @@
import java.awt.BorderLayout;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
import java.util.Properties;
import javax.swing.JComponent;
@@ -117,7 +119,7 @@
logger.info("DGraphView created as a presentation for
view model: "
+ targetView.getSUID());
- vtfListener.viewMap.put(targetView, dgv);
+ vtfListener.viewMap.put(targetView, new
WeakReference<DGraphView>(dgv));
if (presentationContainer instanceof JInternalFrame) {
final JInternalFrame inFrame = (JInternalFrame)
presentationContainer;
@@ -156,7 +158,11 @@
// }
public DGraphView getGraphView(CyNetworkView cnv) {
- return vtfListener.viewMap.get(cnv);
+ Reference<DGraphView> reference = vtfListener.viewMap.get(cnv);
+ if (reference == null) {
+ return null;
+ }
+ return reference.get();
}
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/ViewTaskFactoryListener.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/ViewTaskFactoryListener.java
2012-04-12 21:05:20 UTC (rev 28809)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/ViewTaskFactoryListener.java
2012-04-12 21:09:32 UTC (rev 28810)
@@ -1,7 +1,9 @@
package org.cytoscape.ding.impl;
+import java.lang.ref.Reference;
import java.util.HashMap;
import java.util.Map;
+import java.util.WeakHashMap;
import org.cytoscape.application.swing.CyEdgeViewContextMenuFactory;
import org.cytoscape.application.swing.CyNodeViewContextMenuFactory;
@@ -13,7 +15,7 @@
public class ViewTaskFactoryListener {
- final Map<CyNetworkView, DGraphView> viewMap;
+ final Map<CyNetworkView, Reference<DGraphView>> viewMap;
final Map<NodeViewTaskFactory, Map> nodeViewTFs;
final Map<EdgeViewTaskFactory, Map> edgeViewTFs;
final Map<NetworkViewTaskFactory, Map> emptySpaceTFs;
@@ -23,7 +25,7 @@
public ViewTaskFactoryListener(){
- viewMap = new HashMap<CyNetworkView, DGraphView>();
+ viewMap = new WeakHashMap<CyNetworkView,
Reference<DGraphView>>();
nodeViewTFs = new HashMap<NodeViewTaskFactory, Map>();
edgeViewTFs = new HashMap<EdgeViewTaskFactory, Map>();
emptySpaceTFs = new HashMap<NetworkViewTaskFactory, Map>();
Modified:
core3/impl/trunk/presentation-impl/src/main/java/org/cytoscape/view/presentation/internal/RenderingEngineManagerImpl.java
===================================================================
---
core3/impl/trunk/presentation-impl/src/main/java/org/cytoscape/view/presentation/internal/RenderingEngineManagerImpl.java
2012-04-12 21:05:20 UTC (rev 28809)
+++
core3/impl/trunk/presentation-impl/src/main/java/org/cytoscape/view/presentation/internal/RenderingEngineManagerImpl.java
2012-04-12 21:09:32 UTC (rev 28810)
@@ -9,13 +9,15 @@
import org.cytoscape.view.model.View;
import org.cytoscape.view.model.VisualLexicon;
+import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedEvent;
+import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedListener;
import org.cytoscape.view.presentation.RenderingEngine;
import org.cytoscape.view.presentation.RenderingEngineFactory;
import org.cytoscape.view.presentation.RenderingEngineManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class RenderingEngineManagerImpl implements RenderingEngineManager {
+public class RenderingEngineManagerImpl implements RenderingEngineManager,
NetworkViewAboutToBeDestroyedListener {
private static final Logger logger =
LoggerFactory.getLogger(RenderingEngineManagerImpl.class);
@@ -79,7 +81,6 @@
final View<?> viewModel = renderingEngine.getViewModel();
final Collection<RenderingEngine<?>> currentEngines =
renderingEngineMap.get(viewModel);
currentEngines.remove(renderingEngine);
- this.renderingEngineMap.put(viewModel, currentEngines);
}
@@ -127,4 +128,8 @@
}
+ @Override
+ public void handleEvent(NetworkViewAboutToBeDestroyedEvent e) {
+ renderingEngineMap.remove(e.getNetworkView());
+ }
}
Modified:
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
===================================================================
---
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
2012-04-12 21:05:20 UTC (rev 28809)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
2012-04-12 21:09:32 UTC (rev 28810)
@@ -59,7 +59,6 @@
import org.cytoscape.application.events.SetCurrentNetworkViewListener;
import org.cytoscape.application.swing.CyHelpBroker;
import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.property.CyProperty;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.CyNetworkViewManager;
@@ -322,6 +321,8 @@
RenderingEngine<CyNetwork> removed =
this.presentationMap.remove(view);
logger.debug("#### Removing rendering engine: "
+ removed);
removed = null;
+ iFrameMap.remove(frame);
+ presentationContainerMap.remove(view);
frame.dispose();
}
} catch (Exception e) {
Modified:
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualMappingManagerImpl.java
===================================================================
---
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualMappingManagerImpl.java
2012-04-12 21:05:20 UTC (rev 28809)
+++
core3/impl/trunk/vizmap-impl/impl/src/main/java/org/cytoscape/view/vizmap/internal/VisualMappingManagerImpl.java
2012-04-12 21:09:32 UTC (rev 28810)
@@ -35,13 +35,12 @@
package org.cytoscape.view.vizmap.internal;
import java.awt.Color;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.WeakHashMap;
import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.model.CyNode;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.VisualLexicon;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;
@@ -92,7 +91,7 @@
this.lexManager = lexManager;
visualStyles = new HashSet<VisualStyle>();
- network2VisualStyleMap = new HashMap<CyNetworkView,
VisualStyle>();
+ network2VisualStyleMap = new WeakHashMap<CyNetworkView,
VisualStyle>();
this.defaultStyle = buildGlobalDefaultStyle(factory);
this.visualStyles.add(defaultStyle);
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.