| Index: src/core/SkPicture.cpp
|
| diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
|
| index 45a0d2c38c36100f270e863d41d09351cdd13548..8d196a130b22f38703e61a453e6bdcd1df9c8014 100644
|
| --- a/src/core/SkPicture.cpp
|
| +++ b/src/core/SkPicture.cpp
|
| @@ -8,7 +8,7 @@
|
|
|
|
|
| #include "SkPictureFlat.h"
|
| -#include "SkPicturePlayback.h"
|
| +#include "SkPictureData.h"
|
| #include "SkPictureRecord.h"
|
| #include "SkPictureRecorder.h"
|
|
|
| @@ -146,7 +146,7 @@ SkPicture::SkPicture(int width, int height,
|
|
|
| SkPictInfo info;
|
| this->createHeader(&info);
|
| - fPlayback.reset(SkNEW_ARGS(SkPicturePlayback, (record, info, deepCopyOps)));
|
| + fData.reset(SkNEW_ARGS(SkPictureData, (record, info, deepCopyOps)));
|
| }
|
|
|
| // The simplest / safest way to copy an SkRecord is to replay it into a new one.
|
| @@ -157,7 +157,7 @@ static SkRecord* copy(const SkRecord& src, int width, int height) {
|
| return dst;
|
| }
|
|
|
| -// Create an SkPicturePlayback-backed SkPicture from an SkRecord.
|
| +// Create an SkPictureData-backed SkPicture from an SkRecord.
|
| // This for compatibility with serialization code only. This is not cheap.
|
| static SkPicture* backport(const SkRecord& src, int width, int height) {
|
| SkPictureRecorder recorder;
|
| @@ -171,8 +171,8 @@ SkPicture::SkPicture(const SkPicture& src) : INHERITED() {
|
| fWidth = src.fWidth;
|
| fHeight = src.fHeight;
|
|
|
| - if (NULL != src.fPlayback.get()) {
|
| - fPlayback.reset(SkNEW_ARGS(SkPicturePlayback, (*src.fPlayback)));
|
| + if (NULL != src.fData.get()) {
|
| + fData.reset(SkNEW_ARGS(SkPictureData, (*src.fData)));
|
| fUniqueID = src.uniqueID(); // need to call method to ensure != 0
|
| }
|
|
|
| @@ -203,15 +203,15 @@ void SkPicture::clone(SkPicture* pictures, int count) const {
|
| clone->needsNewGenID();
|
| clone->fWidth = fWidth;
|
| clone->fHeight = fHeight;
|
| - clone->fPlayback.reset(NULL);
|
| + clone->fData.reset(NULL);
|
|
|
| /* We want to copy the src's playback. However, if that hasn't been built
|
| yet, we need to fake a call to endRecording() without actually calling
|
| it (since it is destructive, and we don't want to change src).
|
| */
|
| - if (fPlayback.get()) {
|
| + if (fData.get()) {
|
| if (!copyInfo.initialized) {
|
| - int paintCount = SafeCount(fPlayback->fPaints);
|
| + int paintCount = SafeCount(fData->fPaints);
|
|
|
| /* The alternative to doing this is to have a clone method on the paint and have it
|
| * make the deep copy of its internal structures as needed. The holdup to doing
|
| @@ -221,38 +221,38 @@ void SkPicture::clone(SkPicture* pictures, int count) const {
|
| copyInfo.paintData.setCount(paintCount);
|
|
|
| /* Use an SkBitmapHeap to avoid flattening bitmaps in shaders. If there already is
|
| - * one, use it. If this SkPicturePlayback was created from a stream, fBitmapHeap
|
| + * one, use it. If this SkPictureData was created from a stream, fBitmapHeap
|
| * will be NULL, so create a new one.
|
| */
|
| - if (fPlayback->fBitmapHeap.get() == NULL) {
|
| + if (fData->fBitmapHeap.get() == NULL) {
|
| // FIXME: Put this on the stack inside SkPicture::clone.
|
| SkBitmapHeap* heap = SkNEW(SkBitmapHeap);
|
| copyInfo.controller.setBitmapStorage(heap);
|
| heap->unref();
|
| } else {
|
| - copyInfo.controller.setBitmapStorage(fPlayback->fBitmapHeap);
|
| + copyInfo.controller.setBitmapStorage(fData->fBitmapHeap);
|
| }
|
|
|
| - SkDEBUGCODE(int heapSize = SafeCount(fPlayback->fBitmapHeap.get());)
|
| + SkDEBUGCODE(int heapSize = SafeCount(fData->fBitmapHeap.get());)
|
| for (int i = 0; i < paintCount; i++) {
|
| - if (NeedsDeepCopy(fPlayback->fPaints->at(i))) {
|
| + if (NeedsDeepCopy(fData->fPaints->at(i))) {
|
| copyInfo.paintData[i] =
|
| SkFlatData::Create<SkPaint::FlatteningTraits>(©Info.controller,
|
| - fPlayback->fPaints->at(i), 0);
|
| + fData->fPaints->at(i), 0);
|
|
|
| } else {
|
| // this is our sentinel, which we use in the unflatten loop
|
| copyInfo.paintData[i] = NULL;
|
| }
|
| }
|
| - SkASSERT(SafeCount(fPlayback->fBitmapHeap.get()) == heapSize);
|
| + SkASSERT(SafeCount(fData->fBitmapHeap.get()) == heapSize);
|
|
|
| // needed to create typeface playback
|
| copyInfo.controller.setupPlaybacks();
|
| copyInfo.initialized = true;
|
| }
|
|
|
| - clone->fPlayback.reset(SkNEW_ARGS(SkPicturePlayback, (*fPlayback, ©Info)));
|
| + clone->fData.reset(SkNEW_ARGS(SkPictureData, (*fData, ©Info)));
|
| clone->fUniqueID = this->uniqueID(); // need to call method to ensure != 0
|
| }
|
| }
|
| @@ -295,17 +295,17 @@ const SkPicture::OperationList& SkPicture::OperationList::InvalidList() {
|
|
|
| // fRecord TODO
|
| const SkPicture::OperationList& SkPicture::EXPERIMENTAL_getActiveOps(const SkIRect& queryRect) const {
|
| - SkASSERT(NULL != fPlayback.get());
|
| - if (NULL != fPlayback.get()) {
|
| - return fPlayback->getActiveOps(queryRect);
|
| + SkASSERT(NULL != fData.get());
|
| + if (NULL != fData.get()) {
|
| + return fData->getActiveOps(queryRect);
|
| }
|
| return OperationList::InvalidList();
|
| }
|
|
|
| // fRecord TODO
|
| size_t SkPicture::EXPERIMENTAL_curOpID() const {
|
| - if (NULL != fPlayback.get()) {
|
| - return fPlayback->curOpID();
|
| + if (NULL != fData.get()) {
|
| + return fData->curOpID();
|
| }
|
| return 0;
|
| }
|
| @@ -313,10 +313,10 @@ size_t SkPicture::EXPERIMENTAL_curOpID() const {
|
| // fRecord OK
|
| void SkPicture::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) const {
|
| SkASSERT(NULL != canvas);
|
| - SkASSERT(NULL != fPlayback.get() || NULL != fRecord.get());
|
| + SkASSERT(NULL != fData.get() || NULL != fRecord.get());
|
|
|
| - if (NULL != fPlayback.get()) {
|
| - fPlayback->draw(*canvas, callback);
|
| + if (NULL != fData.get()) {
|
| + fData->draw(*canvas, callback);
|
| }
|
| if (NULL != fRecord.get()) {
|
| SkRecordDraw(*fRecord, canvas, callback);
|
| @@ -378,8 +378,8 @@ bool SkPicture::InternalOnly_BufferIsSKP(SkReadBuffer& buffer, SkPictInfo* pInfo
|
| }
|
|
|
| // fRecord OK
|
| -SkPicture::SkPicture(SkPicturePlayback* playback, int width, int height)
|
| - : fPlayback(playback)
|
| +SkPicture::SkPicture(SkPictureData* data, int width, int height)
|
| + : fData(data)
|
| , fWidth(width)
|
| , fHeight(height) {
|
| this->needsNewGenID();
|
| @@ -395,12 +395,12 @@ SkPicture* SkPicture::CreateFromStream(SkStream* stream, InstallPixelRefProc pro
|
|
|
| // Check to see if there is a playback to recreate.
|
| if (stream->readBool()) {
|
| - SkPicturePlayback* playback = SkPicturePlayback::CreateFromStream(stream, info, proc);
|
| - if (NULL == playback) {
|
| + SkPictureData* data = SkPictureData::CreateFromStream(stream, info, proc);
|
| + if (NULL == data) {
|
| return NULL;
|
| }
|
|
|
| - return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight));
|
| + return SkNEW_ARGS(SkPicture, (data, info.fWidth, info.fHeight));
|
| }
|
|
|
| return NULL;
|
| @@ -416,12 +416,12 @@ SkPicture* SkPicture::CreateFromBuffer(SkReadBuffer& buffer) {
|
|
|
| // Check to see if there is a playback to recreate.
|
| if (buffer.readBool()) {
|
| - SkPicturePlayback* playback = SkPicturePlayback::CreateFromBuffer(buffer, info);
|
| - if (NULL == playback) {
|
| + SkPictureData* data = SkPictureData::CreateFromBuffer(buffer, info);
|
| + if (NULL == data) {
|
| return NULL;
|
| }
|
|
|
| - return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight));
|
| + return SkNEW_ARGS(SkPicture, (data, info.fWidth, info.fHeight));
|
| }
|
|
|
| return NULL;
|
| @@ -449,23 +449,23 @@ void SkPicture::createHeader(SkPictInfo* info) const {
|
|
|
| // fRecord OK
|
| void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const {
|
| - const SkPicturePlayback* playback = fPlayback.get();
|
| + const SkPictureData* data = fData.get();
|
|
|
| // If we're a new-format picture, backport to old format for serialization.
|
| SkAutoTDelete<SkPicture> oldFormat;
|
| - if (NULL == playback && NULL != fRecord.get()) {
|
| + if (NULL == data && NULL != fRecord.get()) {
|
| oldFormat.reset(backport(*fRecord, fWidth, fHeight));
|
| - playback = oldFormat->fPlayback.get();
|
| - SkASSERT(NULL != playback);
|
| + data = oldFormat->fData.get();
|
| + SkASSERT(NULL != data);
|
| }
|
|
|
| SkPictInfo info;
|
| this->createHeader(&info);
|
| stream->write(&info, sizeof(info));
|
|
|
| - if (NULL != playback) {
|
| + if (NULL != data) {
|
| stream->writeBool(true);
|
| - playback->serialize(stream, encoder);
|
| + data->serialize(stream, encoder);
|
| } else {
|
| stream->writeBool(false);
|
| }
|
| @@ -485,23 +485,23 @@ void SkPicture::WriteTagSize(SkWStream* stream, uint32_t tag, size_t size) {
|
|
|
| // fRecord OK
|
| void SkPicture::flatten(SkWriteBuffer& buffer) const {
|
| - const SkPicturePlayback* playback = fPlayback.get();
|
| + const SkPictureData* data = fData.get();
|
|
|
| // If we're a new-format picture, backport to old format for serialization.
|
| SkAutoTDelete<SkPicture> oldFormat;
|
| - if (NULL == playback && NULL != fRecord.get()) {
|
| + if (NULL == data && NULL != fRecord.get()) {
|
| oldFormat.reset(backport(*fRecord, fWidth, fHeight));
|
| - playback = oldFormat->fPlayback.get();
|
| - SkASSERT(NULL != playback);
|
| + data = oldFormat->fData.get();
|
| + SkASSERT(NULL != data);
|
| }
|
|
|
| SkPictInfo info;
|
| this->createHeader(&info);
|
| buffer.writeByteArray(&info, sizeof(info));
|
|
|
| - if (NULL != playback) {
|
| + if (NULL != data) {
|
| buffer.writeBool(true);
|
| - playback->flatten(buffer);
|
| + data->flatten(buffer);
|
| } else {
|
| buffer.writeBool(false);
|
| }
|
| @@ -510,32 +510,32 @@ void SkPicture::flatten(SkWriteBuffer& buffer) const {
|
| #if SK_SUPPORT_GPU
|
| // fRecord TODO
|
| bool SkPicture::suitableForGpuRasterization(GrContext* context, const char **reason) const {
|
| - if (NULL == fPlayback.get()) {
|
| + if (NULL == fData.get()) {
|
| if (NULL != reason) {
|
| - *reason = "Missing playback object.";
|
| + *reason = "Missing internal data.";
|
| }
|
| return false;
|
| }
|
|
|
| - return fPlayback->suitableForGpuRasterization(context, reason);
|
| + return fData->suitableForGpuRasterization(context, reason);
|
| }
|
| #endif
|
|
|
| // fRecord TODO
|
| bool SkPicture::willPlayBackBitmaps() const {
|
| - if (!fPlayback.get()) {
|
| + if (!fData.get()) {
|
| return false;
|
| }
|
| - return fPlayback->containsBitmaps();
|
| + return fData->containsBitmaps();
|
| }
|
|
|
| #ifdef SK_BUILD_FOR_ANDROID
|
| // fRecord TODO, fix by switching Android to SkDrawPictureCallback, then deleting this method
|
| void SkPicture::abortPlayback() {
|
| - if (NULL == fPlayback.get()) {
|
| + if (NULL == fData.get()) {
|
| return;
|
| }
|
| - fPlayback->abort();
|
| + fData->abort();
|
| }
|
| #endif
|
|
|
|
|