Index: src/core/SkPictureContentInfo.h |
diff --git a/src/core/SkPictureContentInfo.h b/src/core/SkPictureContentInfo.h |
index cfeedcf48312317ca0c4684b7cb536c5c78aa297..ed023e68a0ceae781d1db32404925891154aa016 100644 |
--- a/src/core/SkPictureContentInfo.h |
+++ b/src/core/SkPictureContentInfo.h |
@@ -19,6 +19,7 @@ public: |
bool hasText() const { return fNumTexts > 0; } |
bool suitableForGpuRasterization(GrContext* context, const char **reason, |
int sampleCount) const; |
+ bool suitableForOptimization() const { return fNumLayers > 0; } |
void addOperation() { ++fNumOperations; } |
@@ -27,6 +28,12 @@ public: |
void onAddPaintPtr(const SkPaint* paint); |
void onDrawText() { ++fNumTexts; } |
+ void onSaveLayer(); |
+ void onSave(); |
+ void onRestore(); |
+ void rescindLastSave(); |
+ void rescindLastSaveLayer(); |
+ |
void set(const SkPictureContentInfo& src); |
void reset(); |
void swap(SkPictureContentInfo* other); |
@@ -49,6 +56,25 @@ private: |
// This field is incremented every time a drawPath call is |
// issued for a hairline stroked concave path. |
int fNumAAHairlineConcavePaths; |
+ // These fields track the different layer flavors. fNumLayers is just |
+ // a count of all saveLayers, fNumInteriorLayers is the number of layers |
+ // with a layer inside them, fNumLeafLayers is the number of layers with |
+ // no layer inside them. |
+ int fNumLayers; |
+ int fNumInteriorLayers; |
+ int fNumLeafLayers; |
+ |
+ enum Flags { |
+ kSave_Flag = 0x1, |
+ kSaveLayer_Flag = 0x2, |
+ |
+ // Did the current save or saveLayer contain another saveLayer. |
+ // Percolated back down the save stack. |
+ kContainedSaveLayer_Flag = 0x4 |
+ }; |
+ |
+ // Stack of save vs saveLayer information to track nesting |
+ SkTDArray<uint32_t> fSaveStack; |
}; |
#endif |