diff options
author | Sven Gothel <[email protected]> | 2012-03-19 10:46:34 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-03-19 10:46:34 +0100 |
commit | fcd0aa56a368adefbb516fcd710bec38560a2054 (patch) | |
tree | 9b1a54569d837fec87cb1bc47a45ab4e1167aa03 /src/test/com/jogamp/opengl | |
parent | 7a40768455342ab2d1d43bf435baa42a8ccaf917 (diff) |
Adding unit test to validate proper X11 Display closing (Bug 565)
Modified Daniel Balog's unit tests, covering GLWindow (NEWT), GLCanvas (AWT) and GLPBuffer
to fail immediatly when more than 1 open X11 Display is open.
Diffstat (limited to 'src/test/com/jogamp/opengl')
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAWTCloseX11DisplayBug565.java | 89 | ||||
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/jogl/acore/TestNEWTCloseX11DisplayBug565.java | 108 |
2 files changed, 197 insertions, 0 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAWTCloseX11DisplayBug565.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAWTCloseX11DisplayBug565.java new file mode 100644 index 000000000..8df54988f --- /dev/null +++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAWTCloseX11DisplayBug565.java @@ -0,0 +1,89 @@ +package com.jogamp.opengl.test.junit.jogl.acore; + +import jogamp.nativewindow.x11.X11Util; +import org.junit.Assert; +import org.junit.Test; + +import javax.media.nativewindow.NativeWindowFactory; +import javax.media.opengl.GLCapabilities; +import javax.media.opengl.GLCapabilitiesImmutable; +import javax.media.opengl.GLProfile; +import javax.media.opengl.awt.GLCanvas; +import java.awt.Frame; + +/** + * Tests the closing the device of GLCanvas in JOGL + */ +public class TestAWTCloseX11DisplayBug565 { + + @Test + public void testX11WindowMemoryLeak() throws Exception { + GLProfile.initSingleton(); // ensure shared resource runner is done + try { + for ( int j = 0; j < 10; j++ ) { + final int open0; + if(NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(false)) { + open0 = X11Util.getOpenDisplayConnectionNumber(); + } else { + open0 = 0; + } + + GLCapabilitiesImmutable caps = new GLCapabilities( GLProfile.getDefault( ) ); + Frame frame = new Frame( "AWT Resource X11 Leak - #" + j ); + + GLCanvas glCanvas = new GLCanvas( caps ); + frame.add( glCanvas ); + frame.setSize( 128, 128 ); + + final Frame _frame = frame; + final GLCanvas _glCanvas = glCanvas; + + try { + javax.swing.SwingUtilities.invokeAndWait( new Runnable() { + public void run() { + _frame.setVisible( true ); + } + } ); + } + catch ( Throwable t ) { + t.printStackTrace(); + Assert.fail(t.getMessage()); + } + glCanvas.display(); + try { + javax.swing.SwingUtilities.invokeAndWait( new Runnable() { + public void run() { + _frame.setVisible( false ); + _frame.remove( _glCanvas ); + _frame.dispose(); + } + } ); + } + catch ( Throwable t ) { + t.printStackTrace(); + Assert.fail(t.getMessage()); + } + + if(NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(false)) { + final int openD = X11Util.getOpenDisplayConnectionNumber() - open0; + if(openD>1) { + X11Util.dumpOpenDisplayConnections(); + X11Util.dumpPendingDisplayConnections(); + Assert.assertTrue("More than 1 new open display connections", false); + } + } + } + } + catch ( Exception e ) { + e.printStackTrace(); + Assert.fail(e.getMessage()); + } + } + + + public static void main(String args[]) { + org.junit.runner.JUnitCore.main(TestAWTCloseX11DisplayBug565.class.getName()); + } + +} + diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestNEWTCloseX11DisplayBug565.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestNEWTCloseX11DisplayBug565.java new file mode 100644 index 000000000..e14d5b800 --- /dev/null +++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestNEWTCloseX11DisplayBug565.java @@ -0,0 +1,108 @@ +package com.jogamp.opengl.test.junit.jogl.acore; + +import jogamp.nativewindow.x11.X11Util; +import org.junit.Assert; +import org.junit.Test; + +import com.jogamp.newt.opengl.GLWindow; + +import javax.media.nativewindow.NativeWindowFactory; +import javax.media.opengl.DefaultGLCapabilitiesChooser; +import javax.media.opengl.GLCapabilities; +import javax.media.opengl.GLCapabilitiesImmutable; +import javax.media.opengl.GLDrawableFactory; +import javax.media.opengl.GLPbuffer; +import javax.media.opengl.GLProfile; + +/** + * Tests the closing the device of GLWindow and GLPBuffer in JOGL + */ +public class TestNEWTCloseX11DisplayBug565 { + + @Test + public void testX11WindowMemoryLeak() throws Exception { + GLProfile.initSingleton(); // ensure shared resource runner is done + try { + for ( int j = 0; j < 10; j++ ) { + final int open0; + if(NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(false)) { + open0 = X11Util.getOpenDisplayConnectionNumber(); + } else { + open0 = 0; + } + + GLCapabilitiesImmutable caps = new GLCapabilities( GLProfile.getDefault( ) ); + + GLWindow window = GLWindow.create(caps); + window.setTitle("NEWT Resource X11 Leak - #" + j ); + window.setSize( 128, 128 ); + window.setVisible(true); + window.display(); + window.setVisible(false); + window.destroy(); + + if(NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(false)) { + final int openD = X11Util.getOpenDisplayConnectionNumber() - open0; + if(openD>1) { + X11Util.dumpOpenDisplayConnections(); + X11Util.dumpPendingDisplayConnections(); + Assert.assertTrue("More than 1 new open display connections", false); + } + } + } + } + catch ( Exception e ) { + e.printStackTrace(); + Assert.fail(e.getMessage()); + } + } + + + @Test + public void testX11WindowMemoryLeakOffscreenWindow() throws Exception { + GLProfile.initSingleton(); // ensure shared resource runner is done + try { + for ( int j = 0; j < 10; j++ ) { + final int open0; + if(NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(false)) { + open0 = X11Util.getOpenDisplayConnectionNumber(); + } else { + open0 = 0; + } + final GLProfile glp = GLProfile.getDefault( ); + GLCapabilitiesImmutable caps = new GLCapabilities( glp ); + + + GLPbuffer buffer = GLDrawableFactory.getFactory( glp ).createGLPbuffer( + null, + caps, + new DefaultGLCapabilitiesChooser(), + 256, + 256, + null + ); + buffer.display(); + buffer.destroy(); + + if(NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(false)) { + final int openD = X11Util.getOpenDisplayConnectionNumber() - open0; + if(openD>1) { + X11Util.dumpOpenDisplayConnections(); + X11Util.dumpPendingDisplayConnections(); + Assert.assertTrue("More than 1 new open display connections", false); + } + } + } + } + catch ( Exception e ) { + e.printStackTrace(); + Assert.fail(e.getMessage()); + } + } + + public static void main(String args[]) { + org.junit.runner.JUnitCore.main(TestNEWTCloseX11DisplayBug565.class.getName()); + } + +} + |