ShapeStripCache class

Content-keyed cache of rasterized stroke/fill strips, replayed by StripGenerator.fillPath and StripGenerator.strokePath.

The glyph cache's design (relocatable strip blobs, subpixel-phase quantization with the y phase kept inside the 4-px strip row, cache-on-second-sight) applied to geometry without shared object identity: dense CAD sheets redraw the same hatch strokes, dimension arrows, and symbol fills thousands of times as distinct PdfPath instances, so the key is the shape's content - segment opcodes + point deltas from the first point quantized to 1/64 px, stroke/fill parameters, flatten tolerance, and the anchor's subpixel phase. Quantization moves geometry by at most 1/16 px (anchor snap) + 1/128 px (deltas) - half the glyph cache's budget, because snapping a fill shifts whole edges rather than one glyph.

Only paths with at most maxSegments segments attempt the cache (the content walk costs one transform pass + hash, which huge one-off clip/boundary paths must not pay), and - like glyphs - shapes larger than maxShapeSide device px or not fully inside the viewport bypass to the direct unquantized raster.

Constructors

ShapeStripCache({int maxEntries = 131072, int maxBytes = 64 << 20})

Properties

bypasses int
getter/setter pair
collisions int
Draws whose 32-bit content hash matched a stored entry with different content; rendered directly (correctness never rides on the hash).
getter/setter pair
dataBytes int
no setter
entryCount int
no setter
firstSights int
First-sight draws that rendered directly (cache-on-second-sight gate).
getter/setter pair
hashCode int
The hash code for this object.
no setterinherited
hits int
getter/setter pair
maxBytes int
Byte budget over CachedShapeStrips.dataBytes (strip blob + content), across both generations.
final
maxEntries int
Live-entry cap across both generations. Dense CAD documents carry ~25-40k distinct small-shape keys per 10-page render; each generation (half this cap) must hold a whole document's working set or its own render rotates its early keys out and every recurrence turns into a full rebuild (measured slower than no cache at all on ly9-far-cad at a 16k cap). Steady state on the heavy corpus is ~40k entries / ~20 MB; the cap is headroom, not expected occupancy.
final
misses int
getter/setter pair
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
viewportCulls int
Small shapes rejected by the cache probe because their padded device bounds lie wholly outside the current viewport. These draws are complete no-ops and do not fall through to the direct flatten/raster path.
getter/setter pair

Methods

clear() → void
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
resetStats() → void
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Properties

shared ShapeStripCache
Process-wide default instance.
final

Constants

maxSegments → const int
Paths with more segments than this never attempt the cache: the content walk + hash would tax every huge one-off boundary path, and plotted symbols/hatches stay far below it.
maxShapeSide → const int
Shapes larger than this on either side (device px, stroke pad included) bypass the cache.