| /* |
| * Copyright 2014 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkPictureContentInfo_DEFINED |
| #define SkPictureContentInfo_DEFINED |
| |
| #include "SkPaint.h" |
| #include "SkTDArray.h" |
| |
| class GrContext; |
| |
| class SkPictureContentInfo { |
| public: |
| SkPictureContentInfo() { this->reset(); } |
| SkPictureContentInfo(const SkPictureContentInfo& src) { this->set(src); } |
| |
| int numOperations() const { return fNumOperations; } |
| bool hasText() const { return fNumTexts > 0; } |
| |
| int numLayers() const { return fNumLayers; } |
| int numInteriorLayers() const { return fNumInteriorLayers; } |
| int numLeafLayers() const { return fNumLeafLayers; } |
| |
| bool suitableForGpuRasterization(GrContext* context, const char **reason, |
| int sampleCount) const; |
| |
| void addOperation() { ++fNumOperations; } |
| |
| void onDrawPoints(size_t count, const SkPaint& paint); |
| void onDrawPath(const SkPath& path, const SkPaint& paint); |
| 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); |
| |
| private: |
| // Raw count of operations in the picture |
| int fNumOperations; |
| // Count of all forms of drawText |
| int fNumTexts; |
| |
| // This field is incremented every time a paint with a path effect is |
| // used (i.e., it is not a de-duplicated count) |
| int fNumPaintWithPathEffectUses; |
| // This field is incremented every time a paint with a path effect that is |
| // dashed, we are drawing a line, and we can use the gpu fast path |
| int fNumFastPathDashEffects; |
| // This field is incremented every time an anti-aliased drawPath call is |
| // issued with a concave path |
| int fNumAAConcavePaths; |
| // This field is incremented every time a drawPath call is |
| // issued for a hairline stroked concave path. |
| int fNumAAHairlineConcavePaths; |
| // This field is incremented every time a drawPath call is |
| // issued for a concave path that can be rendered with distance fields |
| int fNumAADFEligibleConcavePaths; |
| // 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 |