提交 2009cbeb 编写于 作者: T tdv

6708580: Java applications slow when EXA enabled

Reviewed-by: prr, tdv
Contributed-by: Nceisserer <linuxhippy@gmail.com>
上级 1a1855d3
...@@ -407,6 +407,7 @@ SUNWprivate_1.1 { ...@@ -407,6 +407,7 @@ SUNWprivate_1.1 {
Java_sun_java2d_x11_X11SurfaceData_initSurface; Java_sun_java2d_x11_X11SurfaceData_initSurface;
Java_sun_java2d_x11_X11SurfaceData_isDrawableValid; Java_sun_java2d_x11_X11SurfaceData_isDrawableValid;
Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable; Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable;
Java_sun_java2d_x11_X11SurfaceData_isShmPMAvailable;
Java_sun_java2d_x11_X11SurfaceData_setInvalid; Java_sun_java2d_x11_X11SurfaceData_setInvalid;
Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface; Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface;
Java_sun_java2d_x11_X11SurfaceData_XCreateGC; Java_sun_java2d_x11_X11SurfaceData_XCreateGC;
......
...@@ -337,6 +337,7 @@ SUNWprivate_1.1 { ...@@ -337,6 +337,7 @@ SUNWprivate_1.1 {
Java_sun_java2d_x11_X11SurfaceData_initIDs; Java_sun_java2d_x11_X11SurfaceData_initIDs;
Java_sun_java2d_x11_X11SurfaceData_isDrawableValid; Java_sun_java2d_x11_X11SurfaceData_isDrawableValid;
Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable; Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable;
Java_sun_java2d_x11_X11SurfaceData_isShmPMAvailable;
Java_sun_java2d_x11_X11SurfaceData_initOps; Java_sun_java2d_x11_X11SurfaceData_initOps;
Java_sun_java2d_x11_X11SurfaceData_initSurface; Java_sun_java2d_x11_X11SurfaceData_initSurface;
Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface; Java_sun_java2d_x11_X11SurfaceData_flushNativeSurface;
......
...@@ -50,6 +50,7 @@ import sun.awt.image.PixelConverter; ...@@ -50,6 +50,7 @@ import sun.awt.image.PixelConverter;
import sun.font.X11TextRenderer; import sun.font.X11TextRenderer;
import sun.java2d.InvalidPipeException; import sun.java2d.InvalidPipeException;
import sun.java2d.SunGraphics2D; import sun.java2d.SunGraphics2D;
import sun.java2d.SunGraphicsEnvironment;
import sun.java2d.SurfaceData; import sun.java2d.SurfaceData;
import sun.java2d.SurfaceDataProxy; import sun.java2d.SurfaceDataProxy;
import sun.java2d.loops.SurfaceType; import sun.java2d.loops.SurfaceType;
...@@ -240,6 +241,11 @@ public abstract class X11SurfaceData extends SurfaceData { ...@@ -240,6 +241,11 @@ public abstract class X11SurfaceData extends SurfaceData {
*/ */
public static native boolean isDgaAvailable(); public static native boolean isDgaAvailable();
/**
* Returns true if shared memory pixmaps are available
*/
private static native boolean isShmPMAvailable();
public static boolean isAccelerationEnabled() { public static boolean isAccelerationEnabled() {
if (accelerationEnabled == null) { if (accelerationEnabled == null) {
...@@ -253,8 +259,17 @@ public abstract class X11SurfaceData extends SurfaceData { ...@@ -253,8 +259,17 @@ public abstract class X11SurfaceData extends SurfaceData {
// true iff prop==true, false otherwise // true iff prop==true, false otherwise
accelerationEnabled = Boolean.valueOf(prop); accelerationEnabled = Boolean.valueOf(prop);
} else { } else {
// use pixmaps if there is no dga, no matter local or remote boolean isDisplayLocal = false;
accelerationEnabled = Boolean.valueOf(!isDgaAvailable()); 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()));
} }
} }
} }
......
...@@ -208,6 +208,23 @@ Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable(JNIEnv *env, jobject this) ...@@ -208,6 +208,23 @@ Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable(JNIEnv *env, jobject this)
#endif /* HEADLESS */ #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 * Class: sun_java2d_x11_X11SurfaceData
* Method: initOps * Method: initOps
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册