From 15dd62fcba3047763c72e6c8c74f68c860506b2c Mon Sep 17 00:00:00 2001 From: Mandy Chung Date: Tue, 14 Apr 2009 17:43:45 -0700 Subject: [PATCH] 6818072: Load Ductus using Class.forName if exist instead of using the service loader First attempt Class.forName to load Ductus class before using service loader Reviewed-by: flar, prr --- .../sun/java2d/pipe/RenderingEngine.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/jdk/src/share/classes/sun/java2d/pipe/RenderingEngine.java b/jdk/src/share/classes/sun/java2d/pipe/RenderingEngine.java index 1c189f7e0fb..5a0163a612e 100644 --- a/jdk/src/share/classes/sun/java2d/pipe/RenderingEngine.java +++ b/jdk/src/share/classes/sun/java2d/pipe/RenderingEngine.java @@ -95,6 +95,11 @@ public abstract class RenderingEngine { *
      *     java -Dsun.java2d.renderer=<classname>
      * 
+ * + * 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 reLoader = ServiceLoader.loadInstalled(RenderingEngine.class);