diff options
author | mchung <none@none> | 2009-04-14 17:43:45 -0700 |
---|---|---|
committer | mchung <none@none> | 2009-04-14 17:43:45 -0700 |
commit | d5367ebe0efaef8419e416a330b774ea4c877029 (patch) | |
tree | 6a77aba742faddd2554d8b6f80ee38c1204d0aa8 /src/share/classes/sun/java2d | |
parent | aba28398d989505f1949d9d2b6ea124917bfa1aa (diff) |
6818072: Load Ductus using Class.forName if exist instead of using the service loader
Summary: First attempt Class.forName to load Ductus class before using service loader
Reviewed-by: flar, prr
Diffstat (limited to 'src/share/classes/sun/java2d')
-rw-r--r-- | src/share/classes/sun/java2d/pipe/RenderingEngine.java | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/share/classes/sun/java2d/pipe/RenderingEngine.java b/src/share/classes/sun/java2d/pipe/RenderingEngine.java index 1c189f7e0..5a0163a61 100644 --- a/src/share/classes/sun/java2d/pipe/RenderingEngine.java +++ b/src/share/classes/sun/java2d/pipe/RenderingEngine.java @@ -95,6 +95,11 @@ public abstract class RenderingEngine { * <pre> * java -Dsun.java2d.renderer=<classname> * </pre> + * + * If no specific {@code RenderingEngine} is specified on the command + * or Ductus renderer is specified, it will attempt loading the + * sun.dc.DuctusRenderingEngine class using Class.forName as a fastpath; + * if not found, use the ServiceLoader. * If no specific {@code RenderingEngine} is specified on the command * line then the last one returned by enumerating all subclasses of * {@code RenderingEngine} known to the ServiceLoader is used. @@ -115,9 +120,21 @@ public abstract class RenderingEngine { reImpl = (RenderingEngine) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { + final String ductusREClass = "sun.dc.DuctusRenderingEngine"; String reClass = - System.getProperty("sun.java2d.renderer", - "sun.dc.DuctusRenderingEngine"); + System.getProperty("sun.java2d.renderer", ductusREClass); + if (reClass.equals(ductusREClass)) { + try { + Class cls = Class.forName(ductusREClass); + return cls.newInstance(); + } catch (ClassNotFoundException x) { + // not found + } catch (IllegalAccessException x) { + // should not reach here + } catch (InstantiationException x) { + // should not reach here + } + } ServiceLoader<RenderingEngine> reLoader = ServiceLoader.loadInstalled(RenderingEngine.class); |