Don't bother doing the empty clip check in SkRecordDraw.

On Mike's suggestion, I tested out not doing any empty-clip check at all in
SkRecordDraw, given that mostly we'll do that again anyway inside SkCanvas.

Most SKPs are identical to the status quo, whether bot or silk, played back in tiles
or full.  Average playback performance, both arithmetic and geometric mean, is also
unchanged.

A handful of SKPs do draw faster or slower reliably, particularly when tiled.  E.g. a
cnn tile draws about 40% faster, a cuteoverload tile about 20% slower.  Their profiles
look pretty much the same before and after, so I can't really explain the changes.

I'd say, given that performance is mostly identical and very identical in bulk,
we might as well remove this code.  It's nice to keep SkRecordDraw as dumb as possible.

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

Author: mtklein@chromium.org

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

git-svn-id: http://skia.googlecode.com/svn/trunk@14433 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/record/SkRecordDraw.cpp b/src/record/SkRecordDraw.cpp
index bc1bbf5..4878b3f 100644
--- a/src/record/SkRecordDraw.cpp
+++ b/src/record/SkRecordDraw.cpp
@@ -7,8 +7,6 @@
 
 #include "SkRecordDraw.h"
 
-#include "SkRecordTraits.h"
-
 namespace {
 
 // This is an SkRecord visitor that will draw that SkRecord to an SkCanvas.
@@ -29,27 +27,22 @@
     // No base case, so we'll be compile-time checked that we implemented all possibilities below.
     template <typename T> void draw(const T&);
 
-    // skip() returns true if we can skip this command, false if not.
-    // Update fIndex directly to skip more than just this one command.
+    // skip() should return true if we can skip this command, false if not.
+    // It may update fIndex directly to skip more than just this one command.
 
-    // If we're drawing into an empty clip, we can skip it.  Otherwise, run the command.
-    template <typename T>
-    SK_WHEN(SkRecords::IsDraw<T>, bool) skip(const T&) { return fCanvas->isClipEmpty(); }
+    // Mostly we just blindly call fCanvas and let it handle quick rejects itself.
+    template <typename T> bool skip(const T&) { return false; }
 
-    template <typename T>
-    SK_WHEN(!SkRecords::IsDraw<T>, bool) skip(const T&) { return false; }
-
-    // Special versions for commands added by optimizations.
+    // We add our own quick rejects for commands added by optimizations.
     bool skip(const SkRecords::PairedPushCull& r) {
         if (fCanvas->quickReject(r.base->rect)) {
             fIndex += r.skip;
             return true;
         }
-        return this->skip(*r.base);
+        return false;
     }
-
     bool skip(const SkRecords::BoundedDrawPosTextH& r) {
-        return this->skip(*r.base) || fCanvas->quickRejectY(r.minY, r.maxY);
+        return fCanvas->quickRejectY(r.minY, r.maxY);
     }
 
     SkCanvas* fCanvas;