Jim, Here is a new webrev for the second step on the marlin renderer: http://cr.openjdk.java.net/~lbourges/marlin/marlin-s2.0/
Changes: - ArrayCache: cleanup in the growth algorithm + fixed TODO - Float/Int ArrayCache: added putDirtyArray() methods - RendererContext: added dirtyInt/Float array cache and related methods - RendererStats: added statistics on cached array sizes - CollinearSimplifier: optimized condition evaluation order - FloatMath: removed once condition using bit masking to add +/- 1 - Curve: fixed numeric constants + BreakPtrIterator deals with primitive integer (no more Interator<Integer>) - Dasher: fixed numeric constants + firstSegmentsBuffer uses the dirty float cache - Helpers: fixed numeric constants + removed widenArray methods (use directly RendererContext instead) - MarlinCache: added stats for rowAAChunk + fixed doc - MarlinRenderingEngine: fixed numeric constants + newDashes uses the dirty float cache + RendererContext uses now Weak reference by default (instead of Soft) - Renderer: - keep used range for edgeBuckets / edgeBucketCounts in endRendering() used then in dispose() to avoid FloatMath.ceil() calls - crossings / aux_crossings & edgePtrs / aux_edgePtrs use dirty int array caches - Stroker: fixed numeric constants + use explicit emitLineToRev() / emitQuadToRev() / emitCurveToRev() as short cuts + use local variables for readability and minor performance gain - Stroker.PolyStack: curveTypes / curves use the dirty byte / float array caches + optimized popAll() loop Cheers, Laurent