| Index: src/gpu/SkGpuDevice.cpp | 
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp | 
| index 4fdd4aea8a4df2ff11167d60da1e635f7a3ec274..10c41d8a8e5e42b200b6c0a5731da465eb1addf4 100644 | 
| --- a/src/gpu/SkGpuDevice.cpp | 
| +++ b/src/gpu/SkGpuDevice.cpp | 
| @@ -66,13 +66,6 @@ enum { kDefaultImageFilterCacheSize = 32 * 1024 * 1024 }; | 
| #define CHECK_SHOULD_DRAW(draw) this->prepareDraw(draw) | 
| #endif | 
|  | 
| -#define DO_DEFERRED_CLEAR()             \ | 
| -    do {                                \ | 
| -        if (fNeedClear) {               \ | 
| -            this->clearAll();           \ | 
| -        }                               \ | 
| -    } while (false)                     \ | 
| - | 
| /////////////////////////////////////////////////////////////////////////////// | 
|  | 
| #define CHECK_FOR_ANNOTATION(paint) \ | 
| @@ -175,7 +168,6 @@ SkGpuDevice::SkGpuDevice(GrRenderTarget* rt, int width, int height, | 
| : INHERITED(SkSurfacePropsCopyOrDefault(props)) | 
| , fContext(SkRef(rt->getContext())) | 
| , fRenderTarget(SkRef(rt)) { | 
| -    fNeedClear = SkToBool(flags & kNeedClear_Flag); | 
| fOpaque = SkToBool(flags & kIsOpaque_Flag); | 
|  | 
| SkAlphaType at = fOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; | 
| @@ -185,6 +177,9 @@ SkGpuDevice::SkGpuDevice(GrRenderTarget* rt, int width, int height, | 
| fLegacyBitmap.setPixelRef(pr)->unref(); | 
|  | 
| fDrawContext.reset(this->context()->drawContext(rt, &this->surfaceProps())); | 
| +    if (flags & kNeedClear_Flag) { | 
| +        this->clearAll(); | 
| +    } | 
| } | 
|  | 
| GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::Budgeted budgeted, | 
| @@ -231,7 +226,6 @@ GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::B | 
| bool SkGpuDevice::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, | 
| int x, int y) { | 
| ASSERT_SINGLE_OWNER | 
| -    DO_DEFERRED_CLEAR(); | 
|  | 
| // TODO: teach fRenderTarget to take ImageInfo directly to specify the src pixels | 
| GrPixelConfig config = SkImageInfo2GrPixelConfig(dstInfo); | 
| @@ -269,13 +263,11 @@ bool SkGpuDevice::onWritePixels(const SkImageInfo& info, const void* pixels, siz | 
|  | 
| const SkBitmap& SkGpuDevice::onAccessBitmap() { | 
| ASSERT_SINGLE_OWNER | 
| -    DO_DEFERRED_CLEAR(); | 
| return fLegacyBitmap; | 
| } | 
|  | 
| bool SkGpuDevice::onAccessPixels(SkPixmap* pmap) { | 
| ASSERT_SINGLE_OWNER | 
| -    DO_DEFERRED_CLEAR(); | 
| // For compatibility with clients the know we're backed w/ a bitmap, and want to inspect its | 
| // genID. When we can hide/remove that fact, we can eliminate this call to notify. | 
| // ... ugh. | 
| @@ -307,13 +299,10 @@ void SkGpuDevice::prepareDraw(const SkDraw& draw) { | 
| SkASSERT(draw.fClipStack && draw.fClipStack == fClipStack); | 
|  | 
| fClip.setClipStack(fClipStack, &this->getOrigin()); | 
| - | 
| -    DO_DEFERRED_CLEAR(); | 
| } | 
|  | 
| GrRenderTarget* SkGpuDevice::accessRenderTarget() { | 
| ASSERT_SINGLE_OWNER | 
| -    DO_DEFERRED_CLEAR(); | 
| return fRenderTarget; | 
| } | 
|  | 
| @@ -323,13 +312,10 @@ void SkGpuDevice::clearAll() { | 
| GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "clearAll", fContext); | 
| SkIRect rect = SkIRect::MakeWH(this->width(), this->height()); | 
| fDrawContext->clear(&rect, color, true); | 
| -    fNeedClear = false; | 
| } | 
|  | 
| void SkGpuDevice::replaceRenderTarget(bool shouldRetainContent) { | 
| ASSERT_SINGLE_OWNER | 
| -    // Caller must have accessed the render target, because it knows the rt must be replaced. | 
| -    SkASSERT(!fNeedClear); | 
|  | 
| SkSurface::Budgeted budgeted = | 
| fRenderTarget->resourcePriv().isBudgeted() ? SkSurface::kYes_Budgeted | 
| @@ -1310,10 +1296,6 @@ void SkGpuDevice::drawDevice(const SkDraw& draw, SkBaseDevice* device, | 
| GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawDevice", fContext); | 
| SkGpuDevice* dev = static_cast<SkGpuDevice*>(device); | 
|  | 
| -    // TODO: If the source device covers the whole of this device, we could | 
| -    // omit fNeedsClear -related flushing. | 
| -    // TODO: if source needs clear, we could maybe omit the draw fully. | 
| - | 
| // drawDevice is defined to be in device coords. | 
| CHECK_SHOULD_DRAW(draw); | 
|  | 
| @@ -1769,7 +1751,6 @@ bool SkGpuDevice::onShouldDisableLCD(const SkPaint& paint) const { | 
|  | 
| void SkGpuDevice::flush() { | 
| ASSERT_SINGLE_OWNER | 
| -    DO_DEFERRED_CLEAR(); | 
|  | 
| // Clear batch debugging output | 
| // TODO not exactly sure where this should live | 
|  |