SkRecordDraw: don't bother clipping an empty clip down further

BUG=skia:2378
R=fmalita@chromium.org, mtklein@google.com, fmalita@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/231933003

git-svn-id: http://skia.googlecode.com/svn/trunk@14126 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/record/SkRecordDraw.cpp b/src/record/SkRecordDraw.cpp
index 4782344..ddde2fe 100644
--- a/src/record/SkRecordDraw.cpp
+++ b/src/record/SkRecordDraw.cpp
@@ -37,13 +37,20 @@
     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));