| Index: src/core/SkPicturePlayback.h
|
| diff --git a/src/core/SkPicturePlayback.h b/src/core/SkPicturePlayback.h
|
| index 9d4c996653fd544a12ed2fbcb014eff7388940f7..9751e3a5e704b968442c0a965a68442a81ad5270 100644
|
| --- a/src/core/SkPicturePlayback.h
|
| +++ b/src/core/SkPicturePlayback.h
|
| @@ -62,6 +62,56 @@ struct SkPictInfo {
|
| // Always write this guy last (with no length field afterwards)
|
| #define SK_PICT_EOF_TAG SkSetFourByteTag('e', 'o', 'f', ' ')
|
|
|
| +// SkPictureContentInfo is not serialized! It is intended solely for use
|
| +// with suitableForGpuRasterization.
|
| +class SkPictureContentInfo {
|
| +public:
|
| + SkPictureContentInfo() { this->reset(); }
|
| +
|
| + SkPictureContentInfo(const SkPictureContentInfo& src) { this->set(src); }
|
| +
|
| + void set(const SkPictureContentInfo& src) {
|
| + fNumPaintWithPathEffectUses = src.fNumPaintWithPathEffectUses;
|
| + fNumAAConcavePaths = src.fNumAAConcavePaths;
|
| + fNumAAHairlineConcavePaths = src.fNumAAHairlineConcavePaths;
|
| + }
|
| +
|
| + void reset() {
|
| + fNumPaintWithPathEffectUses = 0;
|
| + fNumAAConcavePaths = 0;
|
| + fNumAAHairlineConcavePaths = 0;
|
| + }
|
| +
|
| + void swap(SkPictureContentInfo* other) {
|
| + SkTSwap(fNumPaintWithPathEffectUses, other->fNumPaintWithPathEffectUses);
|
| + SkTSwap(fNumAAConcavePaths, other->fNumAAConcavePaths);
|
| + SkTSwap(fNumAAHairlineConcavePaths, other->fNumAAHairlineConcavePaths);
|
| + }
|
| +
|
| + void incPaintWithPathEffectUses() { ++fNumPaintWithPathEffectUses; }
|
| + int numPaintWithPathEffectUses() const { return fNumPaintWithPathEffectUses; }
|
| +
|
| + void incAAConcavePaths() { ++fNumAAConcavePaths; }
|
| + int numAAConcavePaths() const { return fNumAAConcavePaths; }
|
| +
|
| + void incAAHairlineConcavePaths() {
|
| + ++fNumAAHairlineConcavePaths;
|
| + SkASSERT(fNumAAHairlineConcavePaths <= fNumAAConcavePaths);
|
| + }
|
| + int numAAHairlineConcavePaths() const { return fNumAAHairlineConcavePaths; }
|
| +
|
| +private:
|
| + // 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 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;
|
| +};
|
| +
|
| /**
|
| * Container for data that is needed to deep copy a SkPicture. The container
|
| * enables the data to be generated once and reused for subsequent copies.
|
| @@ -78,8 +128,8 @@ class SkPicturePlayback {
|
| public:
|
| SkPicturePlayback(const SkPicture* picture, const SkPicturePlayback& src,
|
| SkPictCopyInfo* deepCopyInfo = NULL);
|
| - SkPicturePlayback(const SkPicture* picture, const SkPictureRecord& record, const SkPictInfo&,
|
| - bool deepCopyOps);
|
| + SkPicturePlayback(const SkPicture* picture, const SkPictureRecord& record,
|
| + const SkPictInfo&, bool deepCopyOps);
|
| static SkPicturePlayback* CreateFromStream(SkPicture* picture,
|
| SkStream*,
|
| const SkPictInfo&,
|
| @@ -222,6 +272,10 @@ public:
|
| void dump() const;
|
| #endif
|
|
|
| +#if SK_SUPPORT_GPU
|
| + bool suitableForGpuRasterization(GrContext* context, const char **reason) const;
|
| +#endif
|
| +
|
| private: // these help us with reading/writing
|
| bool parseStreamTag(SkPicture* picture, SkStream*, uint32_t tag, uint32_t size,
|
| SkPicture::InstallPixelRefProc);
|
| @@ -252,6 +306,8 @@ private:
|
| SkBBoxHierarchy* fBoundingHierarchy;
|
| SkPictureStateTree* fStateTree;
|
|
|
| + SkPictureContentInfo fContentInfo;
|
| +
|
| // Limit the opcode playback to be between the offsets 'start' and 'stop'.
|
| // The opcode at 'start' should be a saveLayer while the opcode at
|
| // 'stop' should be a restore. Neither of those commands will be issued.
|
|
|