diff options
author | Sven Gothel <[email protected]> | 2014-07-08 22:11:55 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-07-08 22:11:55 +0200 |
commit | cc9361f542d3b8bcbbf5edbd07c8e686b06ce66e (patch) | |
tree | 024f9edaa9c39c00c0240260f96513e7d0e5fce3 /src/test/com/jogamp/opengl | |
parent | 9f0d303c2c325a5580054fe92f384c9a4076b065 (diff) |
Findbugs: Use AtomicInteger for synchronized increment access
Diffstat (limited to 'src/test/com/jogamp/opengl')
3 files changed, 38 insertions, 29 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextNewtAWTBug523.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextNewtAWTBug523.java index d1155bd30..11ca64258 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextNewtAWTBug523.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestSharedContextNewtAWTBug523.java @@ -40,6 +40,7 @@ import java.util.HashSet; import java.util.Set; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import javax.media.opengl.GL; import javax.media.opengl.GL2; @@ -122,8 +123,8 @@ public class TestSharedContextNewtAWTBug523 extends UITestCase { // Buffer objects can be shared across shared OpenGL context. // If we run with sharedContext, then the tests will use these shared buffer objects, // otherwise each event listener allocates its own buffer objects. - private static volatile int[] sharedVertexBufferObjects = {0}; - private static volatile int[] sharedIndexBufferObjects = {0}; + private static AtomicInteger sharedVertexBufferObjects = new AtomicInteger(0); + private static AtomicInteger sharedIndexBufferObjects = new AtomicInteger(0); @BeforeClass public static void initClass() { @@ -240,19 +241,22 @@ public class TestSharedContextNewtAWTBug523 extends UITestCase { // if (useShared) { System.err.println("Using shared VBOs on slave 0x"+Integer.toHexString(hashCode())); - vertexBufferObjects = sharedVertexBufferObjects; - indexBufferObjects = sharedIndexBufferObjects; + privateVertexBufferObjects[0] = sharedVertexBufferObjects.get(); + privateIndexBufferObjects[0] = sharedIndexBufferObjects.get(); } else { System.err.println("Using local VBOs on slave 0x"+Integer.toHexString(hashCode())); - vertexBufferObjects = privateVertexBufferObjects; - indexBufferObjects = privateIndexBufferObjects; } + vertexBufferObjects = privateVertexBufferObjects; + indexBufferObjects = privateIndexBufferObjects; // if buffer sharing is enabled, then the first of the two event listeners to be // initialized will allocate the buffers, and the other will re-use the allocated one if (vertexBufferObjects[0] == 0) { System.err.println("Creating vertex VBO on slave 0x"+Integer.toHexString(hashCode())); vertexBufferObjects[0] = createVertexBuffer(gl2); + if (useShared) { + sharedVertexBufferObjects.set(vertexBufferObjects[0]); + } } // A check in the case that buffer sharing is enabled but context sharing is not enabled -- in that @@ -276,6 +280,9 @@ public class TestSharedContextNewtAWTBug523 extends UITestCase { if (indexBufferObjects[0] == 0) { System.err.println("Creating index VBO on slave 0x"+Integer.toHexString(hashCode())); indexBufferObjects[0] = createVertexIndexBuffer(gl2); + if (useShared) { + sharedIndexBufferObjects.set(indexBufferObjects[0]); + } } // again, a check in the case that buffer sharing is enabled but context sharing is not enabled @@ -311,12 +318,13 @@ public class TestSharedContextNewtAWTBug523 extends UITestCase { int [] vertexBufferObjects; int [] indexBufferObjects; if (useShared) { - vertexBufferObjects = sharedVertexBufferObjects; - indexBufferObjects = sharedIndexBufferObjects; - } else { - vertexBufferObjects = privateVertexBufferObjects; - indexBufferObjects = privateIndexBufferObjects; + privateVertexBufferObjects[0] = sharedVertexBufferObjects.get(); + privateIndexBufferObjects[0] = sharedIndexBufferObjects.get(); + sharedVertexBufferObjects.set(0); + sharedIndexBufferObjects.set(0); } + vertexBufferObjects = privateVertexBufferObjects; + indexBufferObjects = privateIndexBufferObjects; gl2.glDeleteBuffers(1, vertexBufferObjects, 0); logAnyErrorCodes(this, gl2, "dispose.2"); @@ -414,12 +422,11 @@ public class TestSharedContextNewtAWTBug523 extends UITestCase { int [] indexBufferObjects; synchronized (this) { if (useShared) { - vertexBufferObjects = sharedVertexBufferObjects; - indexBufferObjects = sharedIndexBufferObjects; - } else { - vertexBufferObjects = privateVertexBufferObjects; - indexBufferObjects = privateIndexBufferObjects; + privateVertexBufferObjects[0] = sharedVertexBufferObjects.get(); + privateIndexBufferObjects[0] = sharedIndexBufferObjects.get(); } + vertexBufferObjects = privateVertexBufferObjects; + indexBufferObjects = privateIndexBufferObjects; } // synchronized (this) // A check in the case that buffer sharing is enabled but context sharing is not enabled -- in that diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLJPanelInit02AWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLJPanelInit02AWT.java index 0cbcd5e2f..c60c395eb 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLJPanelInit02AWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLJPanelInit02AWT.java @@ -32,6 +32,7 @@ import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.atomic.AtomicInteger; import javax.media.opengl.GLAnimatorControl; import javax.media.opengl.GLAutoDrawable; @@ -95,7 +96,7 @@ public class TestPerf001GLJPanelInit02AWT extends UITestCase { UITestCase.waitForKey("Pre-Init"); } System.err.println("INIT START"); - initCount = 0; + initCount.set(0); try { javax.swing.SwingUtilities.invokeAndWait(new Runnable() { public void run() { @@ -121,7 +122,7 @@ public class TestPerf001GLJPanelInit02AWT extends UITestCase { glad.addGLEventListener(new GLEventListener() { @Override public void init(final GLAutoDrawable drawable) { - initCount++; + initCount.incrementAndGet(); } @Override public void dispose(final GLAutoDrawable drawable) {} @@ -152,7 +153,7 @@ public class TestPerf001GLJPanelInit02AWT extends UITestCase { super.paintComponent(g); if( !initialized && added && reshapeWidth > 0 && reshapeHeight > 0 && isDisplayable() ) { initialized = true; - initCount++; + initCount.incrementAndGet(); } } }; @@ -178,7 +179,7 @@ public class TestPerf001GLJPanelInit02AWT extends UITestCase { } final long t0 = System.currentTimeMillis(); long t1 = t0; - while( frameCount > initCount && INIT_TIMEOUT > t1 - t0 ) { + while( frameCount > initCount.get() && INIT_TIMEOUT > t1 - t0 ) { try { Thread.sleep(100); System.err.println("Sleep initialized: "+initCount+"/"+frameCount); @@ -188,9 +189,9 @@ public class TestPerf001GLJPanelInit02AWT extends UITestCase { t1 = System.currentTimeMillis(); } t[3] = Platform.currentTimeMillis(); - final double panelCountF = initCount; + final double panelCountF = initCount.get(); System.err.printf("P: %d %s%s:%n\tctor\t%6d/t %6.2f/1%n\tvisible\t%6d/t %6.2f/1%n\tsum-i\t%6d/t %6.2f/1%n", - initCount, + initCount.get(), useGLJPanel?"GLJPanel":(useGLCanvas?"GLCanvas":"No_GL"), initMT?" (mt)":" (01)", t[1]-t[0], (t[1]-t[0])/panelCountF, t[3]-t[1], (t[3]-t[1])/panelCountF, @@ -380,7 +381,7 @@ public class TestPerf001GLJPanelInit02AWT extends UITestCase { static boolean wait = false; static int width = 800, height = 600, frameCount = 25; - volatile int initCount = 0; + AtomicInteger initCount = new AtomicInteger(0); public static void main(final String[] args) { boolean manual=false; diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLWindowInit03NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLWindowInit03NEWT.java index d3dddc56f..60e31aa6a 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLWindowInit03NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/perf/TestPerf001GLWindowInit03NEWT.java @@ -28,6 +28,7 @@ package com.jogamp.opengl.test.junit.jogl.perf; import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.atomic.AtomicInteger; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; @@ -72,7 +73,7 @@ public class TestPerf001GLWindowInit03NEWT extends UITestCase { UITestCase.waitForKey("Pre-Init"); } System.err.println("INIT START"); - initCount = 0; + initCount.set(0); t[0] = Platform.currentTimeMillis(); int x = 32, y = 32; @@ -93,7 +94,7 @@ public class TestPerf001GLWindowInit03NEWT extends UITestCase { frame[i].addGLEventListener(new GLEventListener() { @Override public void init(final GLAutoDrawable drawable) { - initCount++; + initCount.incrementAndGet(); } @Override public void dispose(final GLAutoDrawable drawable) {} @@ -111,7 +112,7 @@ public class TestPerf001GLWindowInit03NEWT extends UITestCase { final long t0 = System.currentTimeMillis(); long t1 = t0; - while( frameCount > initCount && INIT_TIMEOUT > t1 - t0 ) { + while( frameCount > initCount.get() && INIT_TIMEOUT > t1 - t0 ) { try { Thread.sleep(100); System.err.println("Sleep initialized: "+initCount+"/"+frameCount); @@ -121,9 +122,9 @@ public class TestPerf001GLWindowInit03NEWT extends UITestCase { t1 = System.currentTimeMillis(); } t[3] = Platform.currentTimeMillis(); - final double panelCountF = initCount; + final double panelCountF = initCount.get(); System.err.printf("P: %d GLWindow:%n\tctor\t%6d/t %6.2f/1%n\tvisible\t%6d/t %6.2f/1%n\tsum-i\t%6d/t %6.2f/1%n", - initCount, + initCount.get(), t[1]-t[0], (t[1]-t[0])/panelCountF, t[3]-t[1], (t[3]-t[1])/panelCountF, t[3]-t[0], (t[3]-t[0])/panelCountF); @@ -169,7 +170,7 @@ public class TestPerf001GLWindowInit03NEWT extends UITestCase { static boolean wait = false, mainRun = false; static int width = 800, height = 600, frameCount = 25; - volatile int initCount = 0; + AtomicInteger initCount = new AtomicInteger(0); public static void main(final String[] args) { mainRun = true; |