| Index: src/utils/SkDeferredCanvas.cpp
|
| diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp
|
| index b46e92a4a09690d60da94d95a634aad43b799f7d..cce5dde538333a5a097ca692b0f01728aab4ba16 100644
|
| --- a/src/utils/SkDeferredCanvas.cpp
|
| +++ b/src/utils/SkDeferredCanvas.cpp
|
| @@ -526,6 +526,8 @@ SkDeferredCanvas::SkDeferredCanvas(SkDeferredDevice* device) : SkCanvas (device)
|
| void SkDeferredCanvas::init() {
|
| fBitmapSizeThreshold = kDeferredCanvasBitmapSizeThreshold;
|
| fDeferredDrawing = true; // On by default
|
| + fCachedCanvasSize.setEmpty();
|
| + fCachedCanvasSizeDirty = true;
|
| }
|
|
|
| void SkDeferredCanvas::setMaxRecordingStorage(size_t maxStorage) {
|
| @@ -589,6 +591,14 @@ bool SkDeferredCanvas::isFreshFrame() const {
|
| return this->getDeferredDevice()->isFreshFrame();
|
| }
|
|
|
| +SkISize SkDeferredCanvas::getCanvasSize() const {
|
| + if (fCachedCanvasSizeDirty) {
|
| + fCachedCanvasSize = this->getBaseLayerSize();
|
| + fCachedCanvasSizeDirty = false;
|
| + }
|
| + return fCachedCanvasSize;
|
| +}
|
| +
|
| bool SkDeferredCanvas::hasPendingCommands() const {
|
| return this->getDeferredDevice()->hasPendingCommands();
|
| }
|
| @@ -609,6 +619,7 @@ SkSurface* SkDeferredCanvas::setSurface(SkSurface* surface) {
|
| // all pending commands, which can help to seamlessly recover from
|
| // a lost accelerated graphics context.
|
| deferredDevice->setSurface(surface);
|
| + fCachedCanvasSizeDirty = true;
|
| return surface;
|
| }
|
|
|
| @@ -632,7 +643,7 @@ SkImage* SkDeferredCanvas::newImageSnapshot() {
|
| bool SkDeferredCanvas::isFullFrame(const SkRect* rect,
|
| const SkPaint* paint) const {
|
| SkCanvas* canvas = this->drawingCanvas();
|
| - SkISize canvasSize = this->getDeviceSize();
|
| + SkISize canvasSize = this->getCanvasSize();
|
| if (rect) {
|
| if (!canvas->getTotalMatrix().rectStaysRect()) {
|
| return false; // conservative
|
|
|