Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index 80ff34d417e3a08f08fcda4e41e8c1d52e2617d5..bad05151889a6d385a705b12c5ced048fb8226e2 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -2372,7 +2372,26 @@ bool SkCanvas::canDrawBitmapAsSprite(SkScalar x, SkScalar y, int w, int h, const |
return ir.contains(fMCRec->fRasterClip.getBounds()); |
} |
+class TestPinImage { |
+public: |
+ TestPinImage(SkCanvas* canvas, const SkImage* image) { |
+ if ((fCtx = canvas->getGrContext()) != nullptr) { |
+ fImage = image; |
+ image->pinAsTexture(fCtx); |
+ } |
+ } |
+ ~TestPinImage() { |
+ if (fImage) { |
+ fImage->unpinAsTexture(fCtx); |
+ } |
+ } |
+ GrContext* fCtx; |
+ const SkImage* fImage = nullptr; |
+}; |
+ |
void SkCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const SkPaint* paint) { |
+ TestPinImage test(this, image); |
+ |
TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImage()"); |
SkRect bounds = SkRect::MakeXYWH(x, y, |
SkIntToScalar(image->width()), SkIntToScalar(image->height())); |
@@ -2444,6 +2463,8 @@ void SkCanvas::onDrawImageLattice(const SkImage* image, const Lattice& lattice, |
void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst, |
const SkPaint* paint, SrcRectConstraint constraint) { |
+ TestPinImage test(this, image); |
+ |
TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageRect()"); |
if (nullptr == paint || paint->canComputeFastBounds()) { |
SkRect storage = dst; |