OpenJDK / jdk7 / jdk7 / jdk
changeset 775:15435c60c751
6708580: Java applications slow when EXA enabled
Reviewed-by: prr, tdv
Contributed-by: ceisserer <linuxhippy@gmail.com>
author | tdv |
---|---|
date | Thu, 04 Dec 2008 11:21:26 -0800 |
parents | c8eea39734e8 |
children | b0c446712fae |
files | make/sun/awt/mapfile-mawt-vers make/sun/xawt/mapfile-vers src/solaris/classes/sun/java2d/x11/X11SurfaceData.java src/solaris/native/sun/java2d/x11/X11SurfaceData.c |
diffstat | 4 files changed, 36 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/make/sun/awt/mapfile-mawt-vers Thu Dec 04 10:05:36 2008 -0800 +++ b/make/sun/awt/mapfile-mawt-vers Thu Dec 04 11:21:26 2008 -0800 @@ -407,6 +407,7 @@ Java_sun_java2d_x11_X11SurfaceData_initSurface; Java_sun_java2d_x11_X11SurfaceData_isDrawableValid; Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable; + Java_sun_java2d_x11_X11SurfaceData_isShmPMAvailable; Java_sun_java2d_x11_X11SurfaceData_setInvalid; Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface; Java_sun_java2d_x11_X11SurfaceData_XCreateGC;
--- a/make/sun/xawt/mapfile-vers Thu Dec 04 10:05:36 2008 -0800 +++ b/make/sun/xawt/mapfile-vers Thu Dec 04 11:21:26 2008 -0800 @@ -337,6 +337,7 @@ Java_sun_java2d_x11_X11SurfaceData_initIDs; Java_sun_java2d_x11_X11SurfaceData_isDrawableValid; Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable; + Java_sun_java2d_x11_X11SurfaceData_isShmPMAvailable; Java_sun_java2d_x11_X11SurfaceData_initOps; Java_sun_java2d_x11_X11SurfaceData_initSurface; Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface;
--- a/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java Thu Dec 04 10:05:36 2008 -0800 +++ b/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java Thu Dec 04 11:21:26 2008 -0800 @@ -50,6 +50,7 @@ import sun.font.X11TextRenderer; import sun.java2d.InvalidPipeException; import sun.java2d.SunGraphics2D; +import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SurfaceData; import sun.java2d.SurfaceDataProxy; import sun.java2d.loops.SurfaceType; @@ -240,6 +241,11 @@ */ public static native boolean isDgaAvailable(); + /** + * Returns true if shared memory pixmaps are available + */ + private static native boolean isShmPMAvailable(); + public static boolean isAccelerationEnabled() { if (accelerationEnabled == null) { @@ -253,8 +259,17 @@ // true iff prop==true, false otherwise accelerationEnabled = Boolean.valueOf(prop); } else { - // use pixmaps if there is no dga, no matter local or remote - accelerationEnabled = Boolean.valueOf(!isDgaAvailable()); + boolean isDisplayLocal = false; + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + if (ge instanceof SunGraphicsEnvironment) { + isDisplayLocal = ((SunGraphicsEnvironment) ge).isDisplayLocal(); + } + + // EXA based drivers tend to place pixmaps in VRAM, slowing down readbacks. + // Don't use pixmaps if dga is available, + // or we are local and shared memory Pixmaps are not available. + accelerationEnabled = + !(isDgaAvailable() || (isDisplayLocal && !isShmPMAvailable())); } } }
--- a/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Thu Dec 04 10:05:36 2008 -0800 +++ b/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Thu Dec 04 11:21:26 2008 -0800 @@ -208,6 +208,23 @@ #endif /* HEADLESS */ } + +/* + * Class: sun_java2d_x11_X11SurfaceData + * Method: isShmPMAvailable + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL +Java_sun_java2d_x11_X11SurfaceData_isShmPMAvailable(JNIEnv *env, jobject this) +{ +#if defined(HEADLESS) || !defined(MITSHM) + return JNI_FALSE; +#else + return useMitShmPixmaps; +#endif /* HEADLESS, MITSHM */ +} + + /* * Class: sun_java2d_x11_X11SurfaceData * Method: initOps