#ifndef SkPathRef_DEFINED
#define SkPathRef_DEFINED
+#include "SkDynamicAnnotations.h"
#include "SkMatrix.h"
#include "SkPoint.h"
#include "SkRect.h"
// called, if dirty, by getBounds()
void computeBounds() const {
SkDEBUGCODE(this->validate();)
- SkASSERT(fBoundsIsDirty);
+ // TODO(mtklein): remove fBoundsIsDirty and fIsFinite,
+ // using an inverted rect instead of fBoundsIsDirty and always recalculating fIsFinite.
+ //SkASSERT(fBoundsIsDirty);
- fIsFinite = ComputePtBounds(&fBounds, *this);
+ fIsFinite = ComputePtBounds(fBounds.get(), *this);
fBoundsIsDirty = false;
}
SkASSERT(rect.fLeft <= rect.fRight && rect.fTop <= rect.fBottom);
fBounds = rect;
fBoundsIsDirty = false;
- fIsFinite = fBounds.isFinite();
+ fIsFinite = fBounds->isFinite();
}
/** Makes additional room but does not change the counts or change the genID */
kMinSize = 256,
};
- mutable SkRect fBounds;
- uint8_t fSegmentMask;
- mutable uint8_t fBoundsIsDirty;
- mutable SkBool8 fIsFinite; // only meaningful if bounds are valid
- mutable SkBool8 fIsOval;
+ mutable SkTRacyReffable<SkRect> fBounds;
+ mutable SkTRacy<uint8_t> fBoundsIsDirty;
+ mutable SkTRacy<SkBool8> fIsFinite; // only meaningful if bounds are valid
+
+ SkBool8 fIsOval;
+ uint8_t fSegmentMask;
SkPoint* fPoints; // points to begining of the allocation
uint8_t* fVerbs; // points just past the end of the allocation (verbs grow backwards)