| Index: src/gpu/GrContext.cpp
 | 
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
 | 
| index 4a2b2b022862dfab775c0d5eca0fbb40e94194af..4cb90c658e1b3346d9220812a202332d7970a6f2 100644
 | 
| --- a/src/gpu/GrContext.cpp
 | 
| +++ b/src/gpu/GrContext.cpp
 | 
| @@ -437,21 +437,20 @@ bool GrContext::readSurfacePixels(GrSurface* src,
 | 
|      SkAutoTUnref<GrSurface> surfaceToRead(SkRef(src));
 | 
|      bool didTempDraw = false;
 | 
|      if (GrGpu::kNoDraw_DrawPreference != drawPreference) {
 | 
| -        if (tempDrawInfo.fUseExactScratch) {
 | 
| +        if (SkBackingFit::kExact == tempDrawInfo.fTempSurfaceFit) {
 | 
|              // We only respect this when the entire src is being read. Otherwise we can trigger too
 | 
|              // many odd ball texture sizes and trash the cache.
 | 
|              if (width != src->width() || height != src->height()) {
 | 
| -                tempDrawInfo.fUseExactScratch = false;
 | 
| +                tempDrawInfo.fTempSurfaceFit= SkBackingFit::kApprox;
 | 
|              }
 | 
|          }
 | 
| -        SkAutoTUnref<GrTexture> temp;
 | 
| -        if (tempDrawInfo.fUseExactScratch) {
 | 
| -            temp.reset(this->textureProvider()->createTexture(tempDrawInfo.fTempSurfaceDesc,
 | 
| -                                                              SkBudgeted::kYes));
 | 
| -        } else {
 | 
| -            temp.reset(this->textureProvider()->createApproxTexture(tempDrawInfo.fTempSurfaceDesc));
 | 
| -        }
 | 
| -        if (temp) {
 | 
| +        sk_sp<GrDrawContext> tempDC = this->newDrawContext(tempDrawInfo.fTempSurfaceFit,
 | 
| +                                                           tempDrawInfo.fTempSurfaceDesc.fWidth,
 | 
| +                                                           tempDrawInfo.fTempSurfaceDesc.fHeight,
 | 
| +                                                           tempDrawInfo.fTempSurfaceDesc.fConfig,
 | 
| +                                                           tempDrawInfo.fTempSurfaceDesc.fSampleCnt,
 | 
| +                                                           tempDrawInfo.fTempSurfaceDesc.fOrigin);
 | 
| +        if (tempDC) {
 | 
|              SkMatrix textureMatrix;
 | 
|              textureMatrix.setTranslate(SkIntToScalar(left), SkIntToScalar(top));
 | 
|              textureMatrix.postIDiv(src->width(), src->height());
 | 
| @@ -464,10 +463,10 @@ bool GrContext::readSurfacePixels(GrSurface* src,
 | 
|                  } else if (GrGpu::kCallerPrefersDraw_DrawPreference == drawPreference) {
 | 
|                      // We only wanted to do the draw in order to perform the unpremul so don't
 | 
|                      // bother.
 | 
| -                    temp.reset(nullptr);
 | 
| +                    tempDC.reset(nullptr);
 | 
|                  }
 | 
|              }
 | 
| -            if (!fp && temp) {
 | 
| +            if (!fp && tempDC) {
 | 
|                  fp = GrConfigConversionEffect::Make(src->asTexture(), tempDrawInfo.fSwizzle,
 | 
|                                                      GrConfigConversionEffect::kNone_PMConversion,
 | 
|                                                      textureMatrix);
 | 
| @@ -478,10 +477,8 @@ bool GrContext::readSurfacePixels(GrSurface* src,
 | 
|                  paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode);
 | 
|                  paint.setAllowSRGBInputs(true);
 | 
|                  SkRect rect = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height));
 | 
| -                sk_sp<GrDrawContext> drawContext(
 | 
| -                                            this->drawContext(sk_ref_sp(temp->asRenderTarget())));
 | 
| -                drawContext->drawRect(GrNoClip(), paint, SkMatrix::I(), rect, nullptr);
 | 
| -                surfaceToRead.reset(SkRef(temp.get()));
 | 
| +                tempDC->drawRect(GrNoClip(), paint, SkMatrix::I(), rect, nullptr);
 | 
| +                surfaceToRead.reset(tempDC->asTexture().release());
 | 
|                  left = 0;
 | 
|                  top = 0;
 | 
|                  didTempDraw = true;
 | 
| 
 |