< prev index next >

modules/javafx.graphics/src/main/java/com/sun/marlin/DRendererContext.java

Print this page

        

*** 23,36 **** --- 23,38 ---- * 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,65 **** --- 58,69 ---- 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,157 **** --- 152,177 ---- // 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 >