aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPicturePlayback.h
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2014-06-12 05:51:22 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-06-12 05:51:22 -0700
commite26e65e8f831f7a5626c92d11bbb8c2cec1f70de (patch)
tree1586df1f28e642e12c875adbeabc4e711ec9a29b /src/core/SkPicturePlayback.h
parent679426c0b4b6568a79a7a69ac4fc9ba248009d19 (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.h50
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;