提交 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 {
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;
......
......@@ -337,6 +337,7 @@ SUNWprivate_1.1 {
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;
......
......@@ -50,6 +50,7 @@ import sun.awt.image.PixelConverter;
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 abstract class X11SurfaceData extends SurfaceData {
*/
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 @@ public abstract class X11SurfaceData extends SurfaceData {
// 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()));
}
}
}
......
......@@ -208,6 +208,23 @@ Java_sun_java2d_x11_X11SurfaceData_isDgaAvailable(JNIEnv *env, jobject this)
#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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册