Enable quickRejectY in SkCanvas to be inlined.
This CL was tested against the picturePlayback bench and
showed an approx 10-13% improvement on Android when playing
back text.
Review URL: https://codereview.appspot.com/5687083
git-svn-id: http://skia.googlecode.com/svn/trunk@3259 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 058979d..aa400d6 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -429,7 +429,13 @@
@return true if the horizontal band is completely clipped out (i.e. does
not intersect the current clip)
*/
- bool quickRejectY(SkScalar top, SkScalar bottom, EdgeType et) const;
+ bool quickRejectY(SkScalar top, SkScalar bottom, EdgeType et) const {
+ SkASSERT(SkScalarToCompareType(top) >= SkScalarToCompareType(bottom));
+
+ const SkRectCompareType& clipR = this->getLocalClipBoundsCompareType(et);
+ return SkScalarToCompareType(top) >= clipR.fBottom ||
+ SkScalarToCompareType(bottom) <= clipR.fTop;
+ }
/** 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
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 6e061c2..984549a 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1184,30 +1184,6 @@
return path.isEmpty() || this->quickReject(path.getBounds(), et);
}
-bool SkCanvas::quickRejectY(SkScalar top, SkScalar bottom, EdgeType et) const {
- /* current impl ignores edgetype, and relies on
- getLocalClipBoundsCompareType(), which always returns a value assuming
- antialiasing (worst case)
- */
-
- if (fMCRec->fRasterClip->isEmpty()) {
- return true;
- }
-
- SkScalarCompareType userT = SkScalarToCompareType(top);
- SkScalarCompareType userB = SkScalarToCompareType(bottom);
-
- // check for invalid user Y coordinates (i.e. empty)
- // reed: why do we need to do this check, since it slows us down?
- if (userT >= userB) {
- return true;
- }
-
- // check if we are above or below the local clip bounds
- const SkRectCompareType& clipR = this->getLocalClipBoundsCompareType();
- return userT >= clipR.fBottom || userB <= clipR.fTop;
-}
-
static inline int pinIntForScalar(int x) {
#ifdef SK_SCALAR_IS_FIXED
if (x < SK_MinS16) {