Author: echatellier Date: 2012-06-29 21:58:58 +0200 (Fri, 29 Jun 2012) New Revision: 552 Url: http://nuiton.org/repositories/revision/sandbox/552 Log: Add benchmark code Added: jnijnajntest/src/main/java/org/test/GlobalBench.java Modified: jnijnajntest/src/main/java/org/test/testbridj/TestIdleBridj.java jnijnajntest/src/main/java/org/test/testbridj/x11/UnixSystemInfo.java jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java Added: jnijnajntest/src/main/java/org/test/GlobalBench.java =================================================================== --- jnijnajntest/src/main/java/org/test/GlobalBench.java (rev 0) +++ jnijnajntest/src/main/java/org/test/GlobalBench.java 2012-06-29 19:58:58 UTC (rev 552) @@ -0,0 +1,46 @@ +package org.test; + +import org.test.testjni.IdleJNI; + +public class GlobalBench { + + public static final int COUNT = 20000; + + public static void main(String... args) { + + System.loadLibrary("testidle"); + + IdleJNI idleJNI = new IdleJNI(); + org.test.testjna.unix.UnixSystemInfo idleJNA = new org.test.testjna.unix.UnixSystemInfo(); + org.test.testbridj.x11.UnixSystemInfo idleBridj = new org.test.testbridj.x11.UnixSystemInfo(); + + for (int j = 0; j < 10; j++) { + + System.out.println("\nRunning test suite..."); + + // first call jni + long before = System.currentTimeMillis(); + for (int i = 0; i < COUNT; i++) { + idleJNI.getIdleTime(); + } + long after = System.currentTimeMillis(); + System.out.println(String.format("JNI : %d call take %d ms", COUNT, after - before)); + + // second jna + before = System.currentTimeMillis(); + for (int i = 0; i < COUNT; i++) { + idleJNA.getIdleTime(); + } + after = System.currentTimeMillis(); + System.out.println(String.format("JNA : %d call take %d ms", COUNT, after - before)); + + // third bridj + before = System.currentTimeMillis(); + for (int i = 0; i < COUNT; i++) { + idleBridj.getIdleTime(); + } + after = System.currentTimeMillis(); + System.out.println(String.format("Bridj : %d call take %d ms", COUNT, after - before)); + } + } +} Modified: jnijnajntest/src/main/java/org/test/testbridj/TestIdleBridj.java =================================================================== --- jnijnajntest/src/main/java/org/test/testbridj/TestIdleBridj.java 2012-06-29 19:35:30 UTC (rev 551) +++ jnijnajntest/src/main/java/org/test/testbridj/TestIdleBridj.java 2012-06-29 19:58:58 UTC (rev 552) @@ -44,7 +44,7 @@ while (true) { Thread.sleep(1000); - long idle = idleBridj.getIdleTimeMillis(); + long idle = idleBridj.getIdleTime(); System.out.println("Idle since " + idle + "ms"); } } Modified: jnijnajntest/src/main/java/org/test/testbridj/x11/UnixSystemInfo.java =================================================================== --- jnijnajntest/src/main/java/org/test/testbridj/x11/UnixSystemInfo.java 2012-06-29 19:35:30 UTC (rev 551) +++ jnijnajntest/src/main/java/org/test/testbridj/x11/UnixSystemInfo.java 2012-06-29 19:58:58 UTC (rev 552) @@ -4,7 +4,9 @@ import org.test.testbridj.x11.Xss.XScreenSaverInfo; public class UnixSystemInfo { - public long getIdleTimeMillis() { + public long getIdleTime() { + + long idleTime = 0; Display display = null; Pointer<XScreenSaverInfo> pInfo = null; @@ -17,7 +19,7 @@ "XSreenSaver extension not supported !"); } - return pInfo.get().idle(); + idleTime = pInfo.get().idle(); } finally { if (pInfo != null) { X11.XFree(pInfo); @@ -27,5 +29,7 @@ X11.XCloseDisplay(display); } } + + return idleTime; } } Modified: jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java =================================================================== --- jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java 2012-06-29 19:35:30 UTC (rev 551) +++ jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java 2012-06-29 19:58:58 UTC (rev 552) @@ -83,59 +83,34 @@ long idleTime = 0; - // get X11 display - X11.Display display = X11.INSTANCE.XOpenDisplay(null); - if (display == null) { - logger.error("Can't open X11 display"); - } else { - // Display is opened + X11.Display display = null; + Xss.XScreenSaverInfo screenSaverInfo = null; - // check if screensaver extension is enabled - IntByReference eventBase = new IntByReference(); - IntByReference errorBase = new IntByReference(); + try { + // get X11 display + display = X11.INSTANCE.XOpenDisplay(null); + // get root window + X11.Window rootWindow = X11.INSTANCE.XDefaultRootWindow(display); - if (!Xss.INSTANCE.XScreenSaverQueryExtension(display, eventBase, - errorBase)) { - if (logger.isErrorEnabled()) { - logger.error("Can't find xscreensaver extension, " - + "idle time can't be detected"); - } - } else { - // screensaver is enabled + // FIX : without this, cause random NPE + screenSaverInfo = Xss.INSTANCE.XScreenSaverAllocInfo(); - Xss.XScreenSaverInfo screenSaverInfo = Xss.INSTANCE - .XScreenSaverAllocInfo(); + if (Xss.INSTANCE.XScreenSaverQueryInfo(display, rootWindow, + screenSaverInfo) == 0) { + throw new UnsupportedOperationException( + "XSreenSaver extension not supported !"); + } - if (screenSaverInfo == null) { - logger.error("Could not alloc screen saver info"); - } else { - // get root window - X11.Window rootWindow = X11.INSTANCE - .XDefaultRootWindow(display); - - if (rootWindow == null) { - logger.error("Could not query root window"); - } else { - - // FIX : without this, cause random NPE - screenSaverInfo.window = rootWindow; - - Xss.INSTANCE.XScreenSaverQueryInfo(display, rootWindow, - screenSaverInfo); - if (screenSaverInfo.idle == null) { - logger.error("screenSaverInfo.idle is null"); - } else { - idleTime = screenSaverInfo.idle.longValue(); - } - } - } - - // free resources + idleTime = screenSaverInfo.idle.longValue(); + } + finally { + if (screenSaverInfo != null) { X11.INSTANCE.XFree(screenSaverInfo.getPointer()); } - - // free resources - X11.INSTANCE.XCloseDisplay(display); + if (display != null) { + // free resources + X11.INSTANCE.XCloseDisplay(display); + } } return idleTime;