diff options
author | Sven Gothel <[email protected]> | 2014-10-09 03:33:36 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-10-09 03:33:36 +0200 |
commit | b11fd5ebdd4f2e7189f47ffd53bacdd5a80c85e2 (patch) | |
tree | 468c1c9e978849bc9a3f6ff436313d6ae3a03cf5 | |
parent | 39bed561a04dab457663aaa651e9c9f1f7c12270 (diff) |
Newt ScreenMode Tests: Return XRandR error-code, allowing fall-back (OpenIndiana has issues); Min delay 4s before next setScreenMode(..)
4 files changed, 78 insertions, 54 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode00cNEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode00cNEWT.java index 6b353f8fc..37440457a 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode00cNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode00cNEWT.java @@ -70,7 +70,7 @@ public class TestScreenMode00cNEWT extends UITestCase { static int width, height; static final int waitTimeShort = 2000; - static long duration = waitTimeShort; + static long duration = 4000; static int mm_width = 800; static int mm_height = 600; @@ -211,8 +211,15 @@ public class TestScreenMode00cNEWT extends UITestCase { Assert.assertEquals(true,window0.isVisible()); // WARNING: See note in 'UITestCase.resetXRandRIfX11();' - UITestCase.resetXRandRIfX11(); - System.err.println("XRandR Reset :"+monitor.queryCurrentMode()); + final int xrandrErrorCode; + if( 0 == ( xrandrErrorCode = UITestCase.resetXRandRIfX11() ) ) { + System.err.println("XRandR Reset :"+monitor.queryCurrentMode()); + } else { + System.err.println("XRandR Reset : Failed w/ errorCode "+xrandrErrorCode+", fall back to manual reset"); + final boolean smOk = monitor.setCurrentMode(mmOrig); + System.err.println("[X] changeOK : "+smOk); + } + Thread.sleep(duration); validateScreenModeReset0(mmOrig); destroyWindow(window0); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01aNEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01aNEWT.java index 5ca133302..6ddea555c 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01aNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01aNEWT.java @@ -76,7 +76,7 @@ public class TestScreenMode01aNEWT extends UITestCase { static int width, height; static long waitTimeShort = 2000; - static long duration = 2000; + static long duration = 4000; static int mm_width = 800; static int mm_height = 600; diff --git a/src/test/com/jogamp/opengl/test/junit/util/MiscUtils.java b/src/test/com/jogamp/opengl/test/junit/util/MiscUtils.java index 7100e1e1a..943a99dcf 100644 --- a/src/test/com/jogamp/opengl/test/junit/util/MiscUtils.java +++ b/src/test/com/jogamp/opengl/test/junit/util/MiscUtils.java @@ -175,6 +175,13 @@ public class MiscUtils { this.prefix = prefix; this.sync = sync; } + public StreamDump(final StringBuilder sb, final String prefix, final InputStream is, final Object sync) { + this.is = is; + this.outString = sb; + this.outStream = null; + this.prefix = prefix; + this.sync = sync; + } public StreamDump(final StringBuilder sb, final InputStream is, final Object sync) { this.is = is; this.outString = sb; diff --git a/src/test/com/jogamp/opengl/test/junit/util/UITestCase.java b/src/test/com/jogamp/opengl/test/junit/util/UITestCase.java index fb9e2bd14..98d288496 100644 --- a/src/test/com/jogamp/opengl/test/junit/util/UITestCase.java +++ b/src/test/com/jogamp/opengl/test/junit/util/UITestCase.java @@ -73,71 +73,74 @@ public abstract class UITestCase extends SingletonJunitCase { * With NV drivers, one need to add the Modes in proper order to the Screen's Subsection "Display", * otherwise they are either in unsorted resolution order or even n/a! * </p> + * @return error-code with {@code zero} for no error */ @SuppressWarnings("unused") - public static void resetXRandRIfX11() { + public static int resetXRandRIfX11() { + int errorCode = 0; if( NativeWindowFactory.isInitialized() && NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(true) ) { try { final List<String> outputDevices = new ArrayList<String>(); // final List<String> outputSizes = new ArrayList<String>(); - final Object ioSync = new Object(); - synchronized ( ioSync ) { - final StringBuilder out = new StringBuilder(); - final ProcessBuilder pb = new ProcessBuilder("xrandr", "-q"); - pb.redirectErrorStream(true); - System.err.println("XRandR Query: "+pb.command()); - final Process p = pb.start(); - final MiscUtils.StreamDump dump = new MiscUtils.StreamDump( out, p.getInputStream(), ioSync ); - dump.start(); - while( !dump.eos() ) { - ioSync.wait(); - } - p.waitFor(); // should be fine by now .. - final int errorCode = p.exitValue(); - if( 0 == errorCode ) { - // Parse connected output devices ! - final BufferedReader in = new BufferedReader( new StringReader( out.toString() ) ); - String line = null; - while ( ( line = in.readLine() ) != null) { - final String lline = line.toLowerCase(); - if( lline.contains("connected") && !lline.contains("disconnected") ) { - final String od = getFirst(line); - if( null != od ) { - outputDevices.add( od ); - /** - if ( ( line = in.readLine() ) != null ) { - outputSizes.add( getFirst(line) ); - } else { - outputSizes.add( null ); - } */ - } + final StringBuilder out = new StringBuilder(); + final String[] cmdlineQuery = new String[] { "xrandr", "-q" }; + errorCode = processCommand(cmdlineQuery, null, out, "xrandr-query> "); + if( 0 != errorCode ) { + System.err.println("XRandR Query Error Code "+errorCode); + System.err.println(out.toString()); + } else { + // Parse connected output devices ! + final BufferedReader in = new BufferedReader( new StringReader( out.toString() ) ); + String line = null; + while ( ( line = in.readLine() ) != null) { + final String lline = line.toLowerCase(); + if( lline.contains("connected") && !lline.contains("disconnected") ) { + final String od = getFirst(line); + if( null != od ) { + outputDevices.add( od ); + /** + if ( ( line = in.readLine() ) != null ) { + outputSizes.add( getFirst(line) ); + } else { + outputSizes.add( null ); + } */ } } - } else { - System.err.println("XRandR Query Error Code "+errorCode); - System.err.println(out.toString()); } - } - for(int i=0; i<outputDevices.size(); i++) { - final String outputDevice = outputDevices.get(i); - final String outputSize = null; // outputSizes.get(i); - final String[] cmdline; - if( null != outputSize ) { - cmdline = new String[] { "xrandr", "--output", outputDevice, "--mode", outputSize, "--rotate", "normal" }; - } else { - cmdline = new String[] { "xrandr", "--output", outputDevice, "--preferred", "--rotate", "normal" }; + for(int i=0; i<outputDevices.size(); i++) { + final String outputDevice = outputDevices.get(i); + final String outputSize = null; // outputSizes.get(i) + final String[] cmdline; + if( null != outputSize ) { + cmdline = new String[] { "xrandr", "--output", outputDevice, "--mode", outputSize, "--rotate", "normal" }; + } else { + cmdline = new String[] { "xrandr", "--output", outputDevice, "--preferred", "--rotate", "normal" }; + } + System.err.println("XRandR 1.2 Reset: "+Arrays.asList(cmdline)); + errorCode = processCommand(cmdline, System.err, null, "xrandr-1.2-reset> "); + if( 0 != errorCode ) { + System.err.println("XRandR 1.2 Reset Error Code "+errorCode); + break; + } } - System.err.println("XRandR Reset: "+Arrays.asList(cmdline)); - final int errorCode = processCommand(cmdline, System.err, "xrandr-reset> "); + /** + * RandR 1.1 reset does not work .. if( 0 != errorCode ) { - System.err.println("XRandR Reset Error Code "+errorCode); - } + final String[] cmdline = new String[] { "xrandr", "-s", "0", "-o", "normal" }; + System.err.println("XRandR 1.1 Reset: "+Arrays.asList(cmdline)); + errorCode = processCommand(cmdline, System.err, null, "xrandr-1.1-reset> "); + if( 0 != errorCode ) { + System.err.println("XRandR 1.1 Reset Error Code "+errorCode); + } + } */ } } catch (final Exception e) { System.err.println("Caught "+e.getClass().getName()+": "+e.getMessage()); e.printStackTrace(); + errorCode = -1; } } + return errorCode; } private static String getFirst(final String line) { final StringTokenizer tok = new StringTokenizer(line); @@ -150,7 +153,7 @@ public abstract class UITestCase extends SingletonJunitCase { return null; } - public static int processCommand(final String[] cmdline, final OutputStream outstream, final String outPrefix) { + public static int processCommand(final String[] cmdline, final OutputStream outstream, final StringBuilder outstring, final String outPrefix) { int errorCode = 0; final Object ioSync = new Object(); try { @@ -158,7 +161,14 @@ public abstract class UITestCase extends SingletonJunitCase { final ProcessBuilder pb = new ProcessBuilder(cmdline); pb.redirectErrorStream(true); final Process p = pb.start(); - final MiscUtils.StreamDump dump = new MiscUtils.StreamDump( outstream, outPrefix, p.getInputStream(), ioSync); + final MiscUtils.StreamDump dump; + if( null != outstream ) { + dump = new MiscUtils.StreamDump( outstream, outPrefix, p.getInputStream(), ioSync); + } else if( null != outstring ) { + dump = new MiscUtils.StreamDump( outstring, outPrefix, p.getInputStream(), ioSync); + } else { + throw new IllegalArgumentException("Output stream and string are null"); + } dump.start(); while( !dump.eos() ) { ioSync.wait(); |