int SkPicture::approximateOpCount()
authormtklein <mtklein@chromium.org>
Fri, 15 Aug 2014 02:17:18 +0000 (19:17 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 15 Aug 2014 02:17:21 +0000 (19:17 -0700)
NOTREECHECKS=true

BUG=skia:
R=reed@google.com, mtklein@google.com

Author: mtklein@chromium.org

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

include/core/SkPicture.h
src/core/SkPicture.cpp
src/core/SkPictureData.h

index 1e8b364..2a89277 100644 (file)
@@ -197,6 +197,13 @@ public:
     // Takes ref on listener.
     void addDeletionListener(DeletionListener* listener) const;
 
+    /** Return the approximate number of operations in this picture.  This
+     *  number may be greater or less than the number of SkCanvas calls
+     *  recorded: some calls may be recorded as more than one operation, or some
+     *  calls may be optimized away.
+     */
+    int approximateOpCount() const;
+
 private:
     // V2 : adds SkPixelRef's generation ID.
     // V3 : PictInfo tag at beginning, and EOF tag at the end
index fa4c103..ab00000 100644 (file)
@@ -455,3 +455,15 @@ void SkPicture::callDeletionListeners() {
 
     fDeletionListeners.unrefAll();
 }
+
+// fRecord OK
+int SkPicture::approximateOpCount() const {
+    SkASSERT(fRecord.get() || fData.get());
+    if (fRecord.get()) {
+        return fRecord->count();
+    }
+    if (fData.get()) {
+        return fData->opCount();
+    }
+    return 0;
+}
index 3e3ab59..df898cf 100644 (file)
@@ -89,6 +89,8 @@ public:
 
     bool containsBitmaps() const;
 
+    int opCount() const { return fContentInfo.numOperations(); }
+
     const SkData* opData() const { return fOpData; }
 
 protected:
@@ -128,7 +130,7 @@ public:
         return &(*fPaints)[index - 1];
     }
 
-    void initIterator(SkPictureStateTree::Iterator* iter, 
+    void initIterator(SkPictureStateTree::Iterator* iter,
                       const SkTDArray<void*>& draws,
                       SkCanvas* canvas) const {
         if (NULL != fStateTree) {