< prev index next >
modules/javafx.graphics/src/main/java/com/sun/marlin/DRendererContext.java
Print this page
@@ -23,14 +23,16 @@
* questions.
*/
package com.sun.marlin;
+import com.sun.javafx.geom.Path2D;
import java.util.concurrent.atomic.AtomicInteger;
import com.sun.util.reentrant.ReentrantContext;
import com.sun.javafx.geom.Rectangle;
import com.sun.marlin.ArrayCacheConst.CacheStats;
+import java.lang.ref.WeakReference;
/**
* This class is a renderer context dedicated to a single thread
*/
public final class DRendererContext extends ReentrantContext implements MarlinConst {
@@ -56,10 +58,12 @@
public final float[] float6 = new float[6];
// shared curve (dirty) (Renderer / Stroker)
final DCurve curve = new DCurve();
// MarlinRenderingEngine.TransformingPathConsumer2D
public final DTransformingPathConsumer2D transformerPC2D;
+ // recycled Path2D instance (weak)
+ private WeakReference<Path2D> refPath2D = null;
// shared memory between renderer instances:
final DRendererSharedMemory rdrMem;
public final DRenderer renderer;
private DRendererNoAA rendererNoAA = null;
public final DStroker stroker;
@@ -148,10 +152,26 @@
// mark context as CLEAN:
dirty = false;
}
}
+ public Path2D getPath2D() {
+ // resolve reference:
+ Path2D p2d = (refPath2D != null) ? refPath2D.get() : null;
+
+ // create a new Path2D ?
+ if (p2d == null) {
+ p2d = new Path2D(Path2D.WIND_NON_ZERO, INITIAL_EDGES_COUNT); // 32K
+
+ // update weak reference:
+ refPath2D = new WeakReference<Path2D>(p2d);
+ }
+ // reset the path anyway:
+ p2d.reset();
+ return p2d;
+ }
+
public DRendererNoAA getRendererNoAA() {
if (rendererNoAA == null) {
rendererNoAA = new DRendererNoAA(this);
}
return rendererNoAA;
< prev index next >