aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2012-09-17 00:01:51 +0200
committerSven Gothel <[email protected]>2012-09-17 00:01:51 +0200
commit94eae65015f188ff88324710d12895aba71d6f9d (patch)
treeff36afbd0aafac208a6ad3602a10bccf1c2988fa /src
parent8777a6f0b8d5aa7c97643c68c4641593c6fa2c46 (diff)
Analyze crash of shared context each running in multiple threads, disabled test for OSX > 10.7.0
Shared context w/ 3 context each running in there own thread is instable here on OSX 10.7.4/NVidia, SIGSEGV @ glDrawArrays / glBindBuffer .. any shared VBO. Seems to run fine on 10.6.8/NVidia.
Diffstat (limited to 'src')
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT.java124
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT2.java156
2 files changed, 109 insertions, 171 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT.java
index da91350f1..4aa977ae8 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT.java
@@ -28,12 +28,14 @@
package com.jogamp.opengl.test.junit.jogl.acore;
+import com.jogamp.common.os.Platform;
+import com.jogamp.common.util.VersionNumber;
import com.jogamp.newt.opengl.GLWindow;
import javax.media.nativewindow.util.InsetsImmutable;
+import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLDrawableFactory;
-import javax.media.opengl.GLOffscreenAutoDrawable;
import javax.media.opengl.GLProfile;
import com.jogamp.opengl.util.Animator;
@@ -49,7 +51,7 @@ public class TestSharedContextVBOES2NEWT extends UITestCase {
static GLProfile glp;
static GLCapabilities caps;
static int width, height;
- GLOffscreenAutoDrawable sharedDrawable;
+ GLAutoDrawable sharedDrawable;
GearsES2 sharedGears;
@BeforeClass
@@ -66,8 +68,16 @@ public class TestSharedContextVBOES2NEWT extends UITestCase {
}
}
- private void initShared() {
- sharedDrawable = GLDrawableFactory.getFactory(glp).createOffscreenAutoDrawable(null, caps, null, width, height, null);
+ private void initShared(boolean onscreen) {
+ if(onscreen) {
+ GLWindow glWindow = GLWindow.create(caps);
+ Assert.assertNotNull(glWindow);
+ glWindow.setSize(width, height);
+ glWindow.setVisible(true);
+ sharedDrawable = glWindow;
+ } else {
+ sharedDrawable = GLDrawableFactory.getFactory(glp).createOffscreenAutoDrawable(null, caps, null, width, height, null);
+ }
Assert.assertNotNull(sharedDrawable);
sharedGears = new GearsES2();
Assert.assertNotNull(sharedGears);
@@ -79,6 +89,7 @@ public class TestSharedContextVBOES2NEWT extends UITestCase {
private void releaseShared() {
Assert.assertNotNull(sharedDrawable);
sharedDrawable.destroy();
+ sharedDrawable = null;
}
protected GLWindow runTestGL(Animator animator, int x, int y, boolean useShared, boolean vsync) throws InterruptedException {
@@ -86,7 +97,7 @@ public class TestSharedContextVBOES2NEWT extends UITestCase {
Assert.assertNotNull(glWindow);
glWindow.setTitle("Shared Gears NEWT Test: "+x+"/"+y+" shared "+useShared);
if(useShared) {
- glWindow.setSharedContext(sharedDrawable.getContext());
+ glWindow.setSharedContext(sharedDrawable.getContext());
}
glWindow.setSize(width, height);
@@ -98,41 +109,120 @@ public class TestSharedContextVBOES2NEWT extends UITestCase {
glWindow.addGLEventListener(gears);
animator.add(glWindow);
-
+ animator.start();
glWindow.setVisible(true);
Assert.assertTrue(AWTRobotUtil.waitForRealized(glWindow, true));
Assert.assertTrue(AWTRobotUtil.waitForVisible(glWindow, true));
-
+
glWindow.setPosition(x, y);
return glWindow;
}
@Test
- public void test01() throws InterruptedException {
- initShared();
+ public void testCommonAnimatorSharedOnscreen() throws InterruptedException {
+ initShared(true);
+ Animator animator = new Animator();
+ GLWindow f1 = runTestGL(animator, 0, 0, true, false);
+ InsetsImmutable insets = f1.getInsets();
+ GLWindow f2 = runTestGL(animator, f1.getX()+width+insets.getTotalWidth(),
+ f1.getY()+0, true, false);
+ GLWindow f3 = runTestGL(animator, f1.getX()+0,
+ f1.getY()+height+insets.getTotalHeight(), true, false);
+ try {
+ Thread.sleep(duration);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ animator.stop();
+
+ f1.destroy();
+ f2.destroy();
+ f3.destroy();
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f1, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f1, false));
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f2, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f2, false));
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f3, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f3, false));
+
+ releaseShared();
+ }
+
+ @Test
+ public void testCommonAnimatorSharedOffscreen() throws InterruptedException {
+ initShared(false);
Animator animator = new Animator();
GLWindow f1 = runTestGL(animator, 0, 0, true, false);
InsetsImmutable insets = f1.getInsets();
GLWindow f2 = runTestGL(animator, f1.getX()+width+insets.getTotalWidth(),
f1.getY()+0, true, false);
GLWindow f3 = runTestGL(animator, f1.getX()+0,
- f1.getY()+height+insets.getTotalHeight(), false, true);
- animator.setUpdateFPSFrames(1, null);
- animator.start();
- while(animator.isAnimating() && animator.getTotalFPSDuration()<duration) {
- Thread.sleep(100);
+ f1.getY()+height+insets.getTotalHeight(), true, false);
+ try {
+ Thread.sleep(duration);
+ } catch(Exception e) {
+ e.printStackTrace();
}
animator.stop();
f1.destroy();
f2.destroy();
f3.destroy();
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f1, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f1, false));
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f2, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f2, false));
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f3, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f3, false));
releaseShared();
}
+
+ @Test
+ public void testEachWithAnimatorSharedOffscreen() throws InterruptedException {
+ VersionNumber osx1070 = new VersionNumber(10,7,0);
+ if( Platform.getOSType() == Platform.OSType.MACOS && Platform.getOSVersionNumber().compareTo(osx1070) > 0 ) {
+ // instable on OSX .. driver/OS bug when multi threading (3 animator)
+ System.err.println("Shared context w/ 3 context each running in there own thread is instable here on OSX 10.7.4/NVidia,");
+ System.err.println("SIGSEGV @ glDrawArrays / glBindBuffer .. any shared VBO.");
+ System.err.println("Seems to run fine on 10.6.8/NVidia.");
+ return;
+ }
+ initShared(false);
+ Animator animator1 = new Animator();
+ Animator animator2 = new Animator();
+ Animator animator3 = new Animator();
+ GLWindow f1 = runTestGL(animator1, 0, 0, true, false);
+ InsetsImmutable insets = f1.getInsets();
+ GLWindow f2 = runTestGL(animator2, f1.getX()+width+insets.getTotalWidth(),
+ f1.getY()+0, true, false);
+ GLWindow f3 = runTestGL(animator3, f1.getX()+0,
+ f1.getY()+height+insets.getTotalHeight(), true, false);
+
+ try {
+ Thread.sleep(duration);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ animator1.stop();
+ animator2.stop();
+ animator3.stop();
- static long duration = 500; // ms
+ f1.destroy();
+ f2.destroy();
+ f3.destroy();
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f1, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f1, false));
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f2, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f2, false));
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(f3, false));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(f3, false));
+
+ releaseShared();
+ }
+
+ static long duration = 2000; // ms
public static void main(String args[]) {
for(int i=0; i<args.length; i++) {
@@ -143,6 +233,10 @@ public class TestSharedContextVBOES2NEWT extends UITestCase {
} catch (Exception ex) { ex.printStackTrace(); }
}
}
+ /**
+ BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
+ System.err.println("Press enter to continue");
+ System.err.println(stdin.readLine()); */
org.junit.runner.JUnitCore.main(TestSharedContextVBOES2NEWT.class.getName());
}
}
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT2.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT2.java
deleted file mode 100644
index ee1a7311e..000000000
--- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextVBOES2NEWT2.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * Copyright 2010 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``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 JogAmp Community 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.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of JogAmp Community.
- */
-
-package com.jogamp.opengl.test.junit.jogl.acore;
-
-import java.io.IOException;
-
-import com.jogamp.newt.opengl.GLWindow;
-
-import javax.media.nativewindow.util.InsetsImmutable;
-import javax.media.opengl.GLCapabilities;
-import javax.media.opengl.GLProfile;
-import com.jogamp.opengl.util.Animator;
-
-import com.jogamp.opengl.test.junit.util.AWTRobotUtil;
-import com.jogamp.opengl.test.junit.util.UITestCase;
-import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2;
-
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class TestSharedContextVBOES2NEWT2 extends UITestCase {
- static GLProfile glp;
- static GLCapabilities caps;
- static int width, height;
- GLWindow sharedDrawable;
- GearsES2 sharedGears;
-
- @BeforeClass
- public static void initClass() {
- if(GLProfile.isAvailable(GLProfile.GL2ES2)) {
- glp = GLProfile.get(GLProfile.GL2ES2);
- Assert.assertNotNull(glp);
- caps = new GLCapabilities(glp);
- Assert.assertNotNull(caps);
- width = 256;
- height = 256;
- } else {
- setTestSupported(false);
- }
- }
-
- private void initShared() {
- sharedDrawable = GLWindow.create(caps);
- Assert.assertNotNull(sharedDrawable);
- // sharedGears = new Gears(0);
- sharedGears = new GearsES2(0);
- Assert.assertNotNull(sharedGears);
- sharedDrawable.addGLEventListener(sharedGears);
- sharedDrawable.setSize(width, height);
- sharedDrawable.setVisible(true);
- // init and render one frame, which will setup the Gears display lists
- sharedDrawable.display();
- }
-
- private void releaseShared() {
- Assert.assertNotNull(sharedDrawable);
- sharedDrawable.destroy();
- sharedDrawable = null;
- }
-
- protected GLWindow runTestGL(Animator animator, int x, int y, boolean useShared, boolean vsync) throws InterruptedException {
- GLWindow glWindow = GLWindow.create(caps);
-
- Assert.assertNotNull(glWindow);
- glWindow.setTitle("Shared Gears NEWT Test: "+x+"/"+y+" shared "+useShared);
- if(useShared) {
- glWindow.setSharedContext(sharedDrawable.getContext());
- }
-
- glWindow.setSize(width, height);
-
- GearsES2 gears = new GearsES2(vsync ? 1 : 0);
- if(useShared) {
- gears.setGears(sharedGears.getGear1(), sharedGears.getGear2(), sharedGears.getGear3());
- }
- glWindow.addGLEventListener(gears);
-
- animator.add(glWindow);
- animator.start();
- glWindow.setVisible(true);
-
- Assert.assertTrue(AWTRobotUtil.waitForRealized(glWindow, true));
- Assert.assertTrue(AWTRobotUtil.waitForVisible(glWindow, true));
- glWindow.setPosition(x, y);
-
- return glWindow;
- }
-
- @Test
- public void test01() throws InterruptedException {
- initShared();
- GLWindow f1 = runTestGL(new Animator(), 0, 0, true, false);
- InsetsImmutable insets = f1.getInsets();
- GLWindow f2 = runTestGL(new Animator(), f1.getX()+width+insets.getTotalWidth(),
- f1.getY()+0, true, false);
- GLWindow f3 = runTestGL(new Animator(), f1.getX()+0,
- f1.getY()+height+insets.getTotalHeight(), true, false);
-
- try {
- Thread.sleep(duration);
- } catch(Exception e) {
- e.printStackTrace();
- }
-
- f1.destroy();
- f2.destroy();
- f3.destroy();
-
- releaseShared();
- }
-
- static long duration = 2000; // ms
-
- public static void main(String args[]) throws IOException {
- for(int i=0; i<args.length; i++) {
- if(args[i].equals("-time")) {
- i++;
- try {
- duration = Integer.parseInt(args[i]);
- } catch (Exception ex) { ex.printStackTrace(); }
- }
- }
- /**
- BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
- System.err.println("Press enter to continue");
- System.err.println(stdin.readLine()); */
- org.junit.runner.JUnitCore.main(TestSharedContextVBOES2NEWT2.class.getName());
- }
-}