1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkPictureContentInfo_DEFINED 9 #define SkPictureContentInfo_DEFINED 10 11 #include "SkPaint.h" 12 #include "SkTDArray.h" 13 14 class GrContext; 15 16 class SkPictureContentInfo { 17 public: SkPictureContentInfo()18 SkPictureContentInfo() { this->reset(); } SkPictureContentInfo(const SkPictureContentInfo & src)19 SkPictureContentInfo(const SkPictureContentInfo& src) { this->set(src); } 20 numOperations()21 int numOperations() const { return fNumOperations; } hasText()22 bool hasText() const { return fNumTexts > 0; } 23 numLayers()24 int numLayers() const { return fNumLayers; } numInteriorLayers()25 int numInteriorLayers() const { return fNumInteriorLayers; } numLeafLayers()26 int numLeafLayers() const { return fNumLeafLayers; } 27 28 bool suitableForGpuRasterization(GrContext* context, const char **reason, 29 int sampleCount) const; 30 addOperation()31 void addOperation() { ++fNumOperations; } 32 33 void onDrawPoints(size_t count, const SkPaint& paint); 34 void onDrawPath(const SkPath& path, const SkPaint& paint); 35 void onAddPaintPtr(const SkPaint* paint); onDrawText()36 void onDrawText() { ++fNumTexts; } 37 38 void onSaveLayer(); 39 void onSave(); 40 void onRestore(); 41 void rescindLastSave(); 42 void rescindLastSaveLayer(); 43 44 void set(const SkPictureContentInfo& src); 45 void reset(); 46 void swap(SkPictureContentInfo* other); 47 48 private: 49 // Raw count of operations in the picture 50 int fNumOperations; 51 // Count of all forms of drawText 52 int fNumTexts; 53 54 // This field is incremented every time a paint with a path effect is 55 // used (i.e., it is not a de-duplicated count) 56 int fNumPaintWithPathEffectUses; 57 // This field is incremented every time a paint with a path effect that is 58 // dashed, we are drawing a line, and we can use the gpu fast path 59 int fNumFastPathDashEffects; 60 // This field is incremented every time an anti-aliased drawPath call is 61 // issued with a concave path 62 int fNumAAConcavePaths; 63 // This field is incremented every time a drawPath call is 64 // issued for a hairline stroked concave path. 65 int fNumAAHairlineConcavePaths; 66 // This field is incremented every time a drawPath call is 67 // issued for a concave path that can be rendered with distance fields 68 int fNumAADFEligibleConcavePaths; 69 // These fields track the different layer flavors. fNumLayers is just 70 // a count of all saveLayers, fNumInteriorLayers is the number of layers 71 // with a layer inside them, fNumLeafLayers is the number of layers with 72 // no layer inside them. 73 int fNumLayers; 74 int fNumInteriorLayers; 75 int fNumLeafLayers; 76 77 enum Flags { 78 kSave_Flag = 0x1, 79 kSaveLayer_Flag = 0x2, 80 81 // Did the current save or saveLayer contain another saveLayer. 82 // Percolated back down the save stack. 83 kContainedSaveLayer_Flag = 0x4 84 }; 85 86 // Stack of save vs saveLayer information to track nesting 87 SkTDArray<uint32_t> fSaveStack; 88 }; 89 90 #endif 91