| Index: src/record/SkRecordDraw.cpp
|
| diff --git a/src/record/SkRecordDraw.cpp b/src/record/SkRecordDraw.cpp
|
| index 4782344bed241b66337c534f96b85e97eb72f961..ddde2fede80ed1a528fe7143a9c97e87fc9b124f 100644
|
| --- a/src/record/SkRecordDraw.cpp
|
| +++ b/src/record/SkRecordDraw.cpp
|
| @@ -37,13 +37,20 @@ template <> void Draw::operator()(const SkRecords::PushCull& r) {
|
| template <> void Draw::operator()(const SkRecords::T& r) { fCanvas->call; this->updateClip(); }
|
| CASE(Restore, restore());
|
| CASE(SaveLayer, saveLayer(r.bounds, r.paint, r.flags));
|
| +#undef CASE
|
| +
|
| +// These certainly do change the clip,
|
| +// but we can skip them if they're intersecting with a clip that's already empty.
|
| +#define CASE(T, call) template <> void Draw::operator()(const SkRecords::T& r) { \
|
| + if (!(fClipEmpty && SkRegion::kIntersect_Op == r.op)) { fCanvas->call; this->updateClip(); } \
|
| +}
|
| CASE(ClipPath, clipPath(r.path, r.op, r.doAA));
|
| CASE(ClipRRect, clipRRect(r.rrect, r.op, r.doAA));
|
| CASE(ClipRect, clipRect(r.rect, r.op, r.doAA));
|
| CASE(ClipRegion, clipRegion(r.region, r.op));
|
| #undef CASE
|
|
|
| -// Commands which must run regardless of the clip.
|
| +// Commands which must run regardless of the clip, but don't change it themselves.
|
| #define CASE(T, call) \
|
| template <> void Draw::operator()(const SkRecords::T& r) { fCanvas->call; }
|
| CASE(Save, save(r.flags));
|
|
|