aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkPicture.h13
-rw-r--r--src/core/SkPicture.cpp12
-rw-r--r--src/core/SkPictureData.cpp35
-rw-r--r--src/core/SkPictureData.h23
-rw-r--r--src/core/SkPicturePlayback.cpp4
-rw-r--r--src/core/SkPictureRecord.h2
-rw-r--r--src/gpu/SkGpuDevice.cpp4
7 files changed, 43 insertions, 50 deletions
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h
index 4652136376..ca26eb4496 100644
--- a/include/core/SkPicture.h
+++ b/include/core/SkPicture.h
@@ -280,14 +280,11 @@ private:
void createHeader(SkPictInfo* info) const;
static bool IsValidPictInfo(const SkPictInfo& info);
- friend class SkFlatPicture;
- friend class SkPictureData;
- friend class SkPictureRecorder; // just for SkPicture-based constructor
- friend class SkGpuDevice;
- friend class GrGatherCanvas;
- friend class GrGatherDevice;
- friend class SkDebugCanvas;
- friend class SkPicturePlayback; // to get fData
+ friend class SkPictureData; // to access OperationList
+ friend class SkPictureRecorder; // just for SkPicture-based constructor
+ friend class SkGpuDevice; // for EXPERIMENTAL_getActiveOps/OperationList
+ friend class GrGatherCanvas; // needs to know if old or new picture
+ friend class SkPicturePlayback; // to get fData & OperationList
friend class SkPictureReplacementPlayback; // to access OperationList
typedef SkRefCnt INHERITED;
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index 6c7da8a69b..9261664717 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -474,18 +474,6 @@ void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const {
}
// fRecord OK
-void SkPicture::WriteTagSize(SkWriteBuffer& buffer, uint32_t tag, size_t size) {
- buffer.writeUInt(tag);
- buffer.writeUInt(SkToU32(size));
-}
-
-// fRecord OK
-void SkPicture::WriteTagSize(SkWStream* stream, uint32_t tag, size_t size) {
- stream->write32(tag);
- stream->write32(SkToU32(size));
-}
-
-// fRecord OK
void SkPicture::flatten(SkWriteBuffer& buffer) const {
const SkPictureData* data = fData.get();
diff --git a/src/core/SkPictureData.cpp b/src/core/SkPictureData.cpp
index 2c71eebf2f..e89ef37bde 100644
--- a/src/core/SkPictureData.cpp
+++ b/src/core/SkPictureData.cpp
@@ -9,7 +9,6 @@
#include "SkDrawPictureCallback.h"
#include "SkPictureData.h"
#include "SkPictureRecord.h"
-#include "SkPictureStateTree.h"
#include "SkReadBuffer.h"
#include "SkTypeface.h"
#include "SkTSort.h"
@@ -38,8 +37,8 @@ void SkPictureData::initForPlayback() const {
}
SkPictureData::SkPictureData(const SkPictureRecord& record,
- const SkPictInfo& info,
- bool deepCopyOps)
+ const SkPictInfo& info,
+ bool deepCopyOps)
: fInfo(info) {
#ifdef SK_DEBUG_SIZE
size_t overallBytes, bitmapBytes, matricesBytes,
@@ -289,6 +288,16 @@ static size_t compute_chunk_size(SkFlattenable::Factory* array, int count) {
return size;
}
+static void write_tag_size(SkWriteBuffer& buffer, uint32_t tag, size_t size) {
+ buffer.writeUInt(tag);
+ buffer.writeUInt(SkToU32(size));
+}
+
+static void write_tag_size(SkWStream* stream, uint32_t tag, size_t size) {
+ stream->write32(tag);
+ stream->write32(SkToU32(size));
+}
+
void SkPictureData::WriteFactories(SkWStream* stream, const SkFactorySet& rec) {
int count = rec.count();
@@ -299,7 +308,7 @@ void SkPictureData::WriteFactories(SkWStream* stream, const SkFactorySet& rec) {
size_t size = compute_chunk_size(array, count);
// TODO: write_tag_size should really take a size_t
- SkPicture::WriteTagSize(stream, SK_PICT_FACTORY_TAG, (uint32_t) size);
+ write_tag_size(stream, SK_PICT_FACTORY_TAG, (uint32_t) size);
SkDEBUGCODE(size_t start = stream->bytesWritten());
stream->write32(count);
@@ -321,7 +330,7 @@ void SkPictureData::WriteFactories(SkWStream* stream, const SkFactorySet& rec) {
void SkPictureData::WriteTypefaces(SkWStream* stream, const SkRefCntSet& rec) {
int count = rec.count();
- SkPicture::WriteTagSize(stream, SK_PICT_TYPEFACE_TAG, count);
+ write_tag_size(stream, SK_PICT_TYPEFACE_TAG, count);
SkAutoSTMalloc<16, SkTypeface*> storage(count);
SkTypeface** array = (SkTypeface**)storage.get();
@@ -336,32 +345,32 @@ void SkPictureData::flattenToBuffer(SkWriteBuffer& buffer) const {
int i, n;
if ((n = SafeCount(fBitmaps)) > 0) {
- SkPicture::WriteTagSize(buffer, SK_PICT_BITMAP_BUFFER_TAG, n);
+ write_tag_size(buffer, SK_PICT_BITMAP_BUFFER_TAG, n);
for (i = 0; i < n; i++) {
buffer.writeBitmap((*fBitmaps)[i]);
}
}
if ((n = SafeCount(fPaints)) > 0) {
- SkPicture::WriteTagSize(buffer, SK_PICT_PAINT_BUFFER_TAG, n);
+ write_tag_size(buffer, SK_PICT_PAINT_BUFFER_TAG, n);
for (i = 0; i < n; i++) {
buffer.writePaint((*fPaints)[i]);
}
}
if ((n = SafeCount(fPathHeap.get())) > 0) {
- SkPicture::WriteTagSize(buffer, SK_PICT_PATH_BUFFER_TAG, n);
+ write_tag_size(buffer, SK_PICT_PATH_BUFFER_TAG, n);
fPathHeap->flatten(buffer);
}
}
void SkPictureData::serialize(SkWStream* stream,
SkPicture::EncodeBitmap encoder) const {
- SkPicture::WriteTagSize(stream, SK_PICT_READER_TAG, fOpData->size());
+ write_tag_size(stream, SK_PICT_READER_TAG, fOpData->size());
stream->write(fOpData->bytes(), fOpData->size());
if (fPictureCount > 0) {
- SkPicture::WriteTagSize(stream, SK_PICT_PICTURE_TAG, fPictureCount);
+ write_tag_size(stream, SK_PICT_PICTURE_TAG, fPictureCount);
for (int i = 0; i < fPictureCount; i++) {
fPictureRefs[i]->serialize(stream, encoder);
}
@@ -386,7 +395,7 @@ void SkPictureData::serialize(SkWStream* stream,
WriteFactories(stream, factSet);
WriteTypefaces(stream, typefaceSet);
- SkPicture::WriteTagSize(stream, SK_PICT_BUFFER_SIZE_TAG, buffer.bytesWritten());
+ write_tag_size(stream, SK_PICT_BUFFER_SIZE_TAG, buffer.bytesWritten());
buffer.writeToStream(stream);
}
@@ -394,11 +403,11 @@ void SkPictureData::serialize(SkWStream* stream,
}
void SkPictureData::flatten(SkWriteBuffer& buffer) const {
- SkPicture::WriteTagSize(buffer, SK_PICT_READER_TAG, fOpData->size());
+ write_tag_size(buffer, SK_PICT_READER_TAG, fOpData->size());
buffer.writeByteArray(fOpData->bytes(), fOpData->size());
if (fPictureCount > 0) {
- SkPicture::WriteTagSize(buffer, SK_PICT_PICTURE_TAG, fPictureCount);
+ write_tag_size(buffer, SK_PICT_PICTURE_TAG, fPictureCount);
for (int i = 0; i < fPictureCount; i++) {
fPictureRefs[i]->flatten(buffer);
}
diff --git a/src/core/SkPictureData.h b/src/core/SkPictureData.h
index efae974840..e4ee86ab8f 100644
--- a/src/core/SkPictureData.h
+++ b/src/core/SkPictureData.h
@@ -12,6 +12,7 @@
#include "SkPathHeap.h"
#include "SkPicture.h"
#include "SkPictureFlat.h"
+#include "SkPictureStateTree.h"
class SkData;
class SkPictureRecord;
@@ -24,7 +25,6 @@ class SkPaint;
class SkPath;
class SkPictureStateTree;
class SkReadBuffer;
-class SkRegion;
struct SkPictInfo {
enum Flags {
@@ -160,8 +160,7 @@ protected:
bool parseStream(SkStream*, SkPicture::InstallPixelRefProc);
bool parseBuffer(SkReadBuffer& buffer);
-private:
-
+public:
const SkBitmap& getBitmap(SkReader32* reader) const {
const int index = reader->readInt();
if (SkBitmapHeap::INVALID_SLOT == index) {
@@ -192,10 +191,15 @@ private:
return &(*fPaints)[index - 1];
}
- void init();
+ void initIterator(SkPictureStateTree::Iterator* iter,
+ const SkTDArray<void*>& draws,
+ SkCanvas* canvas) const {
+ if (NULL != fStateTree) {
+ fStateTree->initIterator(iter, draws, canvas);
+ }
+ }
#ifdef SK_DEBUG_SIZE
-public:
int size(size_t* sizePtr);
int bitmaps(size_t* size);
int paints(size_t* size);
@@ -241,15 +245,14 @@ public:
GrPixelConfig config, SkScalar dpi) const;
#endif
-private: // these help us with reading/writing
+private:
+ void init();
+
+ // these help us with reading/writing
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 SkPicturePlayback;
-
// 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;
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
index 0c5c74a4fc..d16a6353e9 100644
--- a/src/core/SkPicturePlayback.cpp
+++ b/src/core/SkPicturePlayback.cpp
@@ -66,7 +66,7 @@ static SkBitmap shallow_copy(const SkBitmap& bitmap) {
const SkPicture::OperationList* SkPicturePlayback::getActiveOps(const SkCanvas* canvas) {
- if (fUseBBH && NULL != fPictureData->fStateTree && NULL != fPictureData->fBoundingHierarchy) {
+ if (fUseBBH) {
SkRect clipBounds;
if (canvas->getClipBounds(&clipBounds)) {
SkIRect query;
@@ -89,7 +89,7 @@ bool SkPicturePlayback::initIterator(SkPictureStateTree::Iterator* iter,
return false; // nothing to draw
}
- fPictureData->fStateTree->initIterator(iter, activeOpsList->fOps, canvas);
+ fPictureData->initIterator(iter, activeOpsList->fOps, canvas);
}
return true;
diff --git a/src/core/SkPictureRecord.h b/src/core/SkPictureRecord.h
index 0fdfaa7108..a1b52fb195 100644
--- a/src/core/SkPictureRecord.h
+++ b/src/core/SkPictureRecord.h
@@ -325,7 +325,7 @@ private:
bool fOptsEnabled;
int fInitialSaveCount;
- friend class SkPictureData;
+ friend class SkPictureData; // for SkPictureData's SkPictureRecord-based constructor
friend class SkPictureTester; // for unit testing
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 870ca4a3f6..3f1908be20 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -1840,10 +1840,6 @@ void SkGpuDevice::EXPERIMENTAL_purge(const SkPicture* picture) {
bool SkGpuDevice::EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* picture) {
- if (NULL == picture->fData.get()) {
- return false;
- }
-
SkPicture::AccelData::Key key = GPUAccelData::ComputeAccelDataKey();
const SkPicture::AccelData* data = picture->EXPERIMENTAL_getAccelData(key);