| Index: src/utils/SkDeferredCanvas.cpp
|
| diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
|
| index 09494c9aaa04428a437a88c83c878ede07a8c3bd..b81d64c57dc1c0c89c7fe04c4ff4bcf2c47fd949 100644
|
| --- a/src/utils/SkDeferredCanvas.cpp
|
| +++ b/src/utils/SkDeferredCanvas.cpp
|
| @@ -30,8 +30,7 @@ enum PlaybackMode {
|
| kSilent_PlaybackMode,
|
| };
|
|
|
| -namespace {
|
| -bool shouldDrawImmediately(const SkBitmap* bitmap, const SkPaint* paint,
|
| +static bool shouldDrawImmediately(const SkBitmap* bitmap, const SkPaint* paint,
|
| size_t bitmapSizeThreshold) {
|
| if (bitmap && ((bitmap->getTexture() && !bitmap->isImmutable()) ||
|
| (bitmap->getSize() > bitmapSizeThreshold))) {
|
| @@ -54,7 +53,6 @@ bool shouldDrawImmediately(const SkBitmap* bitmap, const SkPaint* paint,
|
| }
|
| return false;
|
| }
|
| -}
|
|
|
| //-----------------------------------------------------------------------------
|
| // DeferredPipeController
|
| @@ -170,9 +168,10 @@ public:
|
|
|
| virtual SkBaseDevice* onCreateDevice(const SkImageInfo&, Usage) SK_OVERRIDE;
|
|
|
| +#ifdef SK_SUPPORT_LEGACY_WRITEPIXELSCONFIG
|
| virtual void writePixels(const SkBitmap& bitmap, int x, int y,
|
| SkCanvas::Config8888 config8888) SK_OVERRIDE;
|
| -
|
| +#endif
|
| virtual SkSurface* newSurface(const SkImageInfo&) SK_OVERRIDE;
|
|
|
| protected:
|
| @@ -180,6 +179,7 @@ protected:
|
| virtual bool onReadPixels(const SkBitmap& bitmap,
|
| int x, int y,
|
| SkCanvas::Config8888 config8888) SK_OVERRIDE;
|
| + virtual bool onWritePixels(const SkImageInfo&, const void*, size_t, int x, int y) SK_OVERRIDE;
|
|
|
| // The following methods are no-ops on a deferred device
|
| virtual bool filterTextFlags(const SkPaint& paint, TextFlags*) SK_OVERRIDE {
|
| @@ -478,8 +478,9 @@ void DeferredDevice::prepareForImmediatePixelWrite() {
|
| fImmediateCanvas->flush();
|
| }
|
|
|
| -void DeferredDevice::writePixels(const SkBitmap& bitmap,
|
| - int x, int y, SkCanvas::Config8888 config8888) {
|
| +#ifdef SK_SUPPORT_LEGACY_WRITEPIXELSCONFIG
|
| +void DeferredDevice::writePixels(const SkBitmap& bitmap, int x, int y,
|
| + SkCanvas::Config8888 config8888) {
|
|
|
| if (x <= 0 && y <= 0 && (x + bitmap.width()) >= width() &&
|
| (y + bitmap.height()) >= height()) {
|
| @@ -506,6 +507,24 @@ void DeferredDevice::writePixels(const SkBitmap& bitmap,
|
|
|
| }
|
| }
|
| +#endif
|
| +
|
| +bool DeferredDevice::onWritePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes,
|
| + int x, int y) {
|
| + SkASSERT(x >= 0 && y >= 0);
|
| + SkASSERT(x + info.width() <= width());
|
| + SkASSERT(y + info.height() <= height());
|
| +
|
| + this->flushPendingCommands(kNormal_PlaybackMode);
|
| +
|
| + const SkImageInfo deviceInfo = this->imageInfo();
|
| + if (info.width() == deviceInfo.width() && info.height() == deviceInfo.height()) {
|
| + this->skipPendingCommands();
|
| + }
|
| +
|
| + this->prepareForImmediatePixelWrite();
|
| + return immediateDevice()->onWritePixels(info, pixels, rowBytes, x, y);
|
| +}
|
|
|
| const SkBitmap& DeferredDevice::onAccessBitmap() {
|
| this->flushPendingCommands(kNormal_PlaybackMode);
|
|
|