Index: include/core/SkCanvas.h |
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h |
index c3f8599db4d31be8c0b708c97bfce64efe24e334..59c5a5622851acd05948afab0b3cb057e9502dd0 100644 |
--- a/include/core/SkCanvas.h |
+++ b/include/core/SkCanvas.h |
@@ -566,29 +566,7 @@ public: |
@return true if the horizontal band is completely clipped out (i.e. does |
not intersect the current clip) |
*/ |
- bool quickRejectY(SkScalar top, SkScalar bottom) const { |
- SkASSERT(top <= bottom); |
- |
-#ifndef SK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT |
- // TODO: add a hasPerspective method similar to getLocalClipBounds. This |
- // would cache the SkMatrix::hasPerspective result. Alternatively, have |
- // the MC stack just set a hasPerspective boolean as it is updated. |
- if (this->getTotalMatrix().hasPerspective()) { |
- // TODO: consider implementing some half-plane test between the |
- // two Y planes and the device-bounds (i.e., project the top and |
- // bottom Y planes and then determine if the clip bounds is completely |
- // outside either one). |
- return false; |
- } |
-#endif |
- |
- const SkRect& clipR = this->getLocalClipBounds(); |
- // In the case where the clip is empty and we are provided with a |
- // negative top and positive bottom parameter then this test will return |
- // false even though it will be clipped. We have chosen to exclude that |
- // check as it is rare and would result double the comparisons. |
- return top >= clipR.fBottom || bottom <= clipR.fTop; |
- } |
+ bool quickRejectY(SkScalar top, SkScalar bottom) const; |
/** Return the bounds of the current clip (in local coordinates) in the |
bounds parameter, and return true if it is non-empty. This can be useful |
@@ -1639,25 +1617,18 @@ private: |
*/ |
bool canDrawBitmapAsSprite(SkScalar x, SkScalar y, int w, int h, const SkPaint&); |
- /* These maintain a cache of the clip bounds in local coordinates, |
- (converted to 2s-compliment if floats are slow). |
+ |
+ /** |
+ * Keep track of the device clip bounds and if the matrix is scale-translate. This allows |
+ * us to do a fast quick reject in the common case. |
*/ |
- mutable SkRect fCachedLocalClipBounds; |
- mutable bool fCachedLocalClipBoundsDirty; |
+ bool fIsScaleTranslate; |
+ SkRect fDeviceClipBounds; |
+ |
bool fAllowSoftClip; |
bool fAllowSimplifyClip; |
const bool fConservativeRasterClip; |
- const SkRect& getLocalClipBounds() const { |
- if (fCachedLocalClipBoundsDirty) { |
- if (!this->getClipBounds(&fCachedLocalClipBounds)) { |
- fCachedLocalClipBounds.setEmpty(); |
- } |
- fCachedLocalClipBoundsDirty = false; |
- } |
- return fCachedLocalClipBounds; |
- } |
- |
class AutoValidateClip : ::SkNoncopyable { |
public: |
explicit AutoValidateClip(SkCanvas* canvas) : fCanvas(canvas) { |