aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/com/jogamp/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/com/jogamp/opengl')
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAWTCloseX11DisplayBug565.java89
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/acore/TestNEWTCloseX11DisplayBug565.java108
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());
+ }
+
+}
+