diff options
author | robertphillips <robertphillips@google.com> | 2014-06-12 05:51:22 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-06-12 05:51:22 -0700 |
commit | e26e65e8f831f7a5626c92d11bbb8c2cec1f70de (patch) | |
tree | 1586df1f28e642e12c875adbeabc4e711ec9a29b /src/core/SkPicturePlayback.h | |
parent | 679426c0b4b6568a79a7a69ac4fc9ba248009d19 (diff) |
Remove SkPicture pointer from SkPicturePlayback
This CL simplifies the relationship between SkPicture and SkPicturePlayback by moving the path heap into SkPicturePlayback and removing SkPicturePlayback's SkPicture pointer.
R=mtklein@google.com, reed@google.com
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/334493002
Diffstat (limited to 'src/core/SkPicturePlayback.h')
-rw-r--r-- | src/core/SkPicturePlayback.h | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/src/core/SkPicturePlayback.h b/src/core/SkPicturePlayback.h index 9751e3a5e7..23c49cfe71 100644 --- a/src/core/SkPicturePlayback.h +++ b/src/core/SkPicturePlayback.h @@ -9,29 +9,27 @@ #ifndef SkPicturePlayback_DEFINED #define SkPicturePlayback_DEFINED -#include "SkPicture.h" -#include "SkReader32.h" - #include "SkBitmap.h" -#include "SkData.h" -#include "SkMatrix.h" -#include "SkReadBuffer.h" -#include "SkPaint.h" -#include "SkPath.h" #include "SkPathHeap.h" -#include "SkRegion.h" -#include "SkRRect.h" +#include "SkPicture.h" #include "SkPictureFlat.h" #ifdef SK_BUILD_FOR_ANDROID #include "SkThread.h" #endif +class SkData; class SkPictureRecord; +class SkReader32; class SkStream; class SkWStream; class SkBBoxHierarchy; +class SkMatrix; +class SkPaint; +class SkPath; class SkPictureStateTree; +class SkReadBuffer; +class SkRegion; struct SkPictInfo { enum Flags { @@ -126,16 +124,13 @@ struct SkPictCopyInfo { class SkPicturePlayback { public: - SkPicturePlayback(const SkPicture* picture, const SkPicturePlayback& src, + SkPicturePlayback(const SkPicturePlayback& src, SkPictCopyInfo* deepCopyInfo = NULL); - SkPicturePlayback(const SkPicture* picture, const SkPictureRecord& record, - const SkPictInfo&, bool deepCopyOps); - static SkPicturePlayback* CreateFromStream(SkPicture* picture, - SkStream*, + SkPicturePlayback(const SkPictureRecord& record, const SkPictInfo&, bool deepCopyOps); + static SkPicturePlayback* CreateFromStream(SkStream*, const SkPictInfo&, SkPicture::InstallPixelRefProc); - static SkPicturePlayback* CreateFromBuffer(SkPicture* picture, - SkReadBuffer&, + static SkPicturePlayback* CreateFromBuffer(SkReadBuffer&, const SkPictInfo&); virtual ~SkPicturePlayback(); @@ -163,10 +158,10 @@ public: void resetOpID() { fCurOffset = 0; } protected: - explicit SkPicturePlayback(const SkPicture* picture, const SkPictInfo& info); + explicit SkPicturePlayback(const SkPictInfo& info); - bool parseStream(SkPicture* picture, SkStream*, SkPicture::InstallPixelRefProc); - bool parseBuffer(SkPicture* picture, SkReadBuffer& buffer); + bool parseStream(SkStream*, SkPicture::InstallPixelRefProc); + bool parseBuffer(SkReadBuffer& buffer); #ifdef SK_DEVELOPER virtual bool preDraw(int opIndex, int type); virtual void postDraw(int opIndex); @@ -197,7 +192,8 @@ private: } const SkPath& getPath(SkReader32& reader) { - return fPicture->getPath(reader.readInt() - 1); + int index = reader.readInt() - 1; + return (*fPathHeap.get())[index]; } const SkPicture* getPicture(SkReader32& reader) { @@ -277,18 +273,14 @@ public: #endif private: // these help us with reading/writing - bool parseStreamTag(SkPicture* picture, SkStream*, uint32_t tag, uint32_t size, - SkPicture::InstallPixelRefProc); - bool parseBufferTag(SkPicture* picture, SkReadBuffer&, uint32_t tag, uint32_t size); + bool parseStreamTag(SkStream*, uint32_t tag, uint32_t size, SkPicture::InstallPixelRefProc); + bool parseBufferTag(SkReadBuffer&, uint32_t tag, uint32_t size); void flattenToBuffer(SkWriteBuffer&) const; private: friend class SkPicture; friend class SkGpuDevice; // for access to setDrawLimits & setReplacements - // The picture that owns this SkPicturePlayback object - const SkPicture* fPicture; - // Only used by getBitmap() if the passed in index is SkBitmapHeap::INVALID_SLOT. This empty // bitmap allows playback to draw nothing and move on. SkBitmap fBadBitmap; @@ -300,6 +292,8 @@ private: SkData* fOpData; // opcodes and parameters + SkAutoTUnref<const SkPathHeap> fPathHeap; // reference counted + const SkPicture** fPictureRefs; int fPictureCount; @@ -403,6 +397,8 @@ private: static void WriteFactories(SkWStream* stream, const SkFactorySet& rec); static void WriteTypefaces(SkWStream* stream, const SkRefCntSet& rec); + void initForPlayback() const; + #ifdef SK_BUILD_FOR_ANDROID SkMutex fDrawMutex; bool fAbortCurrentPlayback; |