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