SkPDFGraphicState::~SkPDFGraphicState() { SkAutoMutexAcquire lock(CanonicalPaintsMutex()); if (!fSMask) { int index = Find(fPaint); SkASSERT(index >= 0); SkASSERT(CanonicalPaints()[index].fGraphicState == this); CanonicalPaints().removeShuffle(index); } fResources.unrefAll(); }
// static SkPDFGraphicState* SkPDFGraphicState::GetGraphicStateForPaint(const SkPaint& paint) { SkAutoMutexAcquire lock(CanonicalPaintsMutex()); int index = Find(paint); if (index >= 0) { CanonicalPaints()[index].fGraphicState->ref(); return CanonicalPaints()[index].fGraphicState; } GSCanonicalEntry newEntry(new SkPDFGraphicState(paint)); CanonicalPaints().push(newEntry); return newEntry.fGraphicState; }
// static int SkPDFGraphicState::Find(const SkPaint& paint) { GSCanonicalEntry search(&paint); return CanonicalPaints().find(search); }
// static int SkPDFGraphicState::Find(const SkPaint& paint) { CanonicalPaintsMutex().assertHeld(); GSCanonicalEntry search(&paint); return CanonicalPaints().find(search); }