aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Daniel <egdaniel@google.com>2021-09-16 08:35:15 -0400
committerGreg Daniel <egdaniel@google.com>2021-09-20 20:35:15 +0000
commite579754b63d90b21d356808920265d9dfaea7bb0 (patch)
tree3e7f9d545e51615cfd343fb0c8eca6f6724f8a9a
parent57caf0895f596a617fd1d9b56068e7fc08e70476 (diff)
downloadskia-e579754b63d90b21d356808920265d9dfaea7bb0.tar.gz
Make sure we use device bounds for DrawableOp
Bug: 198924563 Test: manual testing of failing gmail webview Merged-In: I82a5d9c5ada0f91634cbf4ca87f3da6dc0e2ec79 Change-Id: Ib5f68419742cded6150932ff31505a877b337272
-rw-r--r--src/core/SkCanvas.cpp2
-rw-r--r--src/gpu/SkGpuDevice.cpp7
2 files changed, 5 insertions, 4 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 833df7470f..bcfb5f9914 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -2364,7 +2364,7 @@ void SkCanvas::onDrawDrawable(SkDrawable* dr, const SkMatrix* matrix) {
// drawable bounds are no longer reliable (e.g. android displaylist)
// so don't use them for quick-reject
this->predrawNotify();
- this->baseDevice()->drawDrawable(dr, matrix, this);
+ this->topDevice()->drawDrawable(dr, matrix, this);
}
void SkCanvas::onDrawAtlas2(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[],
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index fc6a8623d7..ffcfe53b52 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -950,13 +950,14 @@ void SkGpuDevice::drawDrawable(SkDrawable* drawable, const SkMatrix* matrix, SkC
GrBackendApi api = this->recordingContext()->backend();
if (GrBackendApi::kVulkan == api) {
- const SkMatrix& ctm = canvas->getLocalToDeviceAs3x3();
+ const SkMatrix& ctm = this->localToDevice();
const SkMatrix& combinedMatrix = matrix ? SkMatrix::Concat(ctm, *matrix) : ctm;
std::unique_ptr<SkDrawable::GpuDrawHandler> gpuDraw =
- drawable->snapGpuDrawHandler(api, combinedMatrix, canvas->getDeviceClipBounds(),
+ drawable->snapGpuDrawHandler(api, combinedMatrix, this->devClipBounds(),
this->imageInfo());
if (gpuDraw) {
- fSurfaceDrawContext->drawDrawable(std::move(gpuDraw), drawable->getBounds());
+ fSurfaceDrawContext->drawDrawable(
+ std::move(gpuDraw), combinedMatrix.mapRect(drawable->getBounds()));
return;
}
}