diff --git a/examples/src/main/java/org/piccolo2d/examples/ActivityMemoryLeakBugExample.java b/examples/src/main/java/org/piccolo2d/examples/ActivityMemoryLeakBugExample.java deleted file mode 100644 index 32957df..0000000 --- a/examples/src/main/java/org/piccolo2d/examples/ActivityMemoryLeakBugExample.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2008-2011, Piccolo2D project, http://piccolo2d.org - * Copyright (c) 1998-2008, University of Maryland - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided - * that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions - * and the following disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its - * contributors may be used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.piccolo2d.examples; - -import org.piccolo2d.PLayer; -import org.piccolo2d.PNode; -import org.piccolo2d.activities.PActivity; -import org.piccolo2d.extras.PFrame; -import org.piccolo2d.nodes.PPath; - -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.lang.ref.WeakReference; - -/** - * Example that demonstrates the memory leak in Issue 185. - *

- * Memory leak - PActivityScheduler keeps processed activities in reference
- * http://code.google.com/p/piccolo2d/issues/detail?id=185 - *

- */ -public class ActivityMemoryLeakBugExample extends PFrame { - - public static void main(String[] args) { - new ActivityMemoryLeakBugExample(); - } - - /** {@inheritDoc} */ - public void initialize() { - final PLayer layer = getCanvas().getLayer(); - // Create the node that we expect to get garbage collected. - PNode node = PPath.createEllipse(20, 20, 20, 20); - layer.addChild(node); - // Create a WeakReference to the node so we can detect if it is gc'd. - final WeakReference ref = new WeakReference(layer.getChild(0)); - // Create and execute an activity. - ((PNode) ref.get()).animateToPositionScaleRotation(0, 0, 5.0, 0, 1000); - // Create a Timer that will start after the activity and repeat. - new Timer(2000, new ActionListener() { - public void actionPerformed(final ActionEvent e) { - // Remove our reference to the node. - layer.removeAllChildren(); - // Force garbage collection. - System.gc(); - // This should print null if the node was successfully gc'd. (IT never does.) - System.out.println(ref.get()); - // This prints 0 as expected. - System.out.println(layer.getRoot().getActivityScheduler().getActivitiesReference().size()); - } - }).start(); - // This will cause any previous activity references to clear. - forceCleanupOfPriorActivities(layer); - } - - private void forceCleanupOfPriorActivities(final PLayer layer) { - new Thread() { - /** {@inheritDoc} */ - public void run() { - // Wait 6 seconds before doing the cleanup so the bug can be witnessed. - try { - Thread.sleep(6000); - } - catch (InterruptedException e) { - // empty - } - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - PActivity a = new PActivity(-1) { - protected void activityStep(final long elapsedTime) { - System.out.println("cleanup activity"); - terminate(); - } - }; - layer.getRoot().addActivity(a); - } - }); - } - }.start(); - } -} diff --git a/examples/src/main/java/org/piccolo2d/examples/FrameCanvasSizeBugExample.java b/examples/src/main/java/org/piccolo2d/examples/FrameCanvasSizeBugExample.java deleted file mode 100644 index 9426089..0000000 --- a/examples/src/main/java/org/piccolo2d/examples/FrameCanvasSizeBugExample.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2008-2011, Piccolo2D project, http://piccolo2d.org - * Copyright (c) 1998-2008, University of Maryland - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided - * that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions - * and the following disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its - * contributors may be used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.piccolo2d.examples; - -import java.awt.Color; - -import org.piccolo2d.PCanvas; -import org.piccolo2d.extras.PFrame; -import org.piccolo2d.nodes.PText; - - - -/** - * This example demonstrates a bug with setting the size - * of a PFrame. See http://code.google.com/p/piccolo2d/issues/detail?id=141. - */ -public class FrameCanvasSizeBugExample - extends PFrame { - - /** Default serial version UID. */ - private static final long serialVersionUID = 1L; - - - /** - * Create a new frame canvas size bug example. - */ - public FrameCanvasSizeBugExample() { - this(null); - } - - /** - * Create a new frame canvas size bug example for the specified canvas. - * - * @param canvas canvas for this frame canvas size bug example - */ - public FrameCanvasSizeBugExample(final PCanvas canvas) { - super("FrameCanvasSizeBugExample", false, canvas); - //setSize(410, 410); - //getCanvas().setSize(410, 410); does not help - } - - - /** {@inheritDoc} */ - public void initialize() { - PText label = new PText("Note white at border S and E\nIt goes away when frame is resized"); - label.setOffset(200, 340); - getCanvas().getLayer().addChild(label); - getCanvas().setBackground(Color.PINK); - getCanvas().setOpaque(true); - setSize(410, 410); - //getCanvas().setSize(410, 410); does not help - } - - - /** - * Main. - * - * @param args command line arguments, ignored - */ - public static void main(final String[] args) { - new FrameCanvasSizeBugExample(); - } -} diff --git a/examples/src/main/java/org/piccolo2d/examples/issues/ActivityMemoryLeakBugExample.java b/examples/src/main/java/org/piccolo2d/examples/issues/ActivityMemoryLeakBugExample.java new file mode 100644 index 0000000..32957df --- /dev/null +++ b/examples/src/main/java/org/piccolo2d/examples/issues/ActivityMemoryLeakBugExample.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2008-2011, Piccolo2D project, http://piccolo2d.org + * Copyright (c) 1998-2008, University of Maryland + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions + * and the following disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its + * contributors may be used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.piccolo2d.examples; + +import org.piccolo2d.PLayer; +import org.piccolo2d.PNode; +import org.piccolo2d.activities.PActivity; +import org.piccolo2d.extras.PFrame; +import org.piccolo2d.nodes.PPath; + +import javax.swing.SwingUtilities; +import javax.swing.Timer; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.lang.ref.WeakReference; + +/** + * Example that demonstrates the memory leak in Issue 185. + *

+ * Memory leak - PActivityScheduler keeps processed activities in reference
+ * http://code.google.com/p/piccolo2d/issues/detail?id=185 + *

+ */ +public class ActivityMemoryLeakBugExample extends PFrame { + + public static void main(String[] args) { + new ActivityMemoryLeakBugExample(); + } + + /** {@inheritDoc} */ + public void initialize() { + final PLayer layer = getCanvas().getLayer(); + // Create the node that we expect to get garbage collected. + PNode node = PPath.createEllipse(20, 20, 20, 20); + layer.addChild(node); + // Create a WeakReference to the node so we can detect if it is gc'd. + final WeakReference ref = new WeakReference(layer.getChild(0)); + // Create and execute an activity. + ((PNode) ref.get()).animateToPositionScaleRotation(0, 0, 5.0, 0, 1000); + // Create a Timer that will start after the activity and repeat. + new Timer(2000, new ActionListener() { + public void actionPerformed(final ActionEvent e) { + // Remove our reference to the node. + layer.removeAllChildren(); + // Force garbage collection. + System.gc(); + // This should print null if the node was successfully gc'd. (IT never does.) + System.out.println(ref.get()); + // This prints 0 as expected. + System.out.println(layer.getRoot().getActivityScheduler().getActivitiesReference().size()); + } + }).start(); + // This will cause any previous activity references to clear. + forceCleanupOfPriorActivities(layer); + } + + private void forceCleanupOfPriorActivities(final PLayer layer) { + new Thread() { + /** {@inheritDoc} */ + public void run() { + // Wait 6 seconds before doing the cleanup so the bug can be witnessed. + try { + Thread.sleep(6000); + } + catch (InterruptedException e) { + // empty + } + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + PActivity a = new PActivity(-1) { + protected void activityStep(final long elapsedTime) { + System.out.println("cleanup activity"); + terminate(); + } + }; + layer.getRoot().addActivity(a); + } + }); + } + }.start(); + } +} diff --git a/examples/src/main/java/org/piccolo2d/examples/issues/FrameCanvasSizeBugExample.java b/examples/src/main/java/org/piccolo2d/examples/issues/FrameCanvasSizeBugExample.java new file mode 100644 index 0000000..9426089 --- /dev/null +++ b/examples/src/main/java/org/piccolo2d/examples/issues/FrameCanvasSizeBugExample.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2008-2011, Piccolo2D project, http://piccolo2d.org + * Copyright (c) 1998-2008, University of Maryland + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions + * and the following disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its + * contributors may be used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.piccolo2d.examples; + +import java.awt.Color; + +import org.piccolo2d.PCanvas; +import org.piccolo2d.extras.PFrame; +import org.piccolo2d.nodes.PText; + + + +/** + * This example demonstrates a bug with setting the size + * of a PFrame. See http://code.google.com/p/piccolo2d/issues/detail?id=141. + */ +public class FrameCanvasSizeBugExample + extends PFrame { + + /** Default serial version UID. */ + private static final long serialVersionUID = 1L; + + + /** + * Create a new frame canvas size bug example. + */ + public FrameCanvasSizeBugExample() { + this(null); + } + + /** + * Create a new frame canvas size bug example for the specified canvas. + * + * @param canvas canvas for this frame canvas size bug example + */ + public FrameCanvasSizeBugExample(final PCanvas canvas) { + super("FrameCanvasSizeBugExample", false, canvas); + //setSize(410, 410); + //getCanvas().setSize(410, 410); does not help + } + + + /** {@inheritDoc} */ + public void initialize() { + PText label = new PText("Note white at border S and E\nIt goes away when frame is resized"); + label.setOffset(200, 340); + getCanvas().getLayer().addChild(label); + getCanvas().setBackground(Color.PINK); + getCanvas().setOpaque(true); + setSize(410, 410); + //getCanvas().setSize(410, 410); does not help + } + + + /** + * Main. + * + * @param args command line arguments, ignored + */ + public static void main(final String[] args) { + new FrameCanvasSizeBugExample(); + } +}