diff options
author | Nader Jawad <njawad@google.com> | 2021-04-07 16:05:13 -0700 |
---|---|---|
committer | Nader Jawad <njawad@google.com> | 2021-04-07 16:07:00 -0700 |
commit | 8f5d66b748b82bc0b45c2f261ec87e8fe81b2efd (patch) | |
tree | 5caad6064192412d570ca448a86580a234f01b41 /libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | |
parent | 41a5cb8946256d50bb0e60a3e63e5de42761e1a2 (diff) |
Do not use SkImageFilter for Stretch
Refactor stretch implementation to manually
draw the shader as a rect instead of using
SkImageFilter
Bug: 184184033
Test: Re-ran stretch tests
Change-Id: I6263f5474b185b3f81ef9fd1bec3e43e86da49f2
Diffstat (limited to 'libs/hwui/pipeline/skia/RenderNodeDrawable.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index 5627a7e27232..77d99a67b602 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -180,20 +180,7 @@ static bool layerNeedsPaint(const sk_sp<SkImage>& snapshotImage, const LayerProp paint->setColorFilter(sk_ref_sp(properties.getColorFilter())); sk_sp<SkImageFilter> imageFilter = sk_ref_sp(properties.getImageFilter()); - sk_sp<SkImageFilter> stretchFilter = - properties.getStretchEffect().getImageFilter(snapshotImage); - sk_sp<SkImageFilter> filter; - if (imageFilter && stretchFilter) { - filter = SkImageFilters::Compose( - std::move(stretchFilter), - std::move(imageFilter) - ); - } else if (stretchFilter) { - filter = std::move(stretchFilter); - } else { - filter = std::move(imageFilter); - } - paint->setImageFilter(std::move(filter)); + paint->setImageFilter(std::move(imageFilter)); return true; } return false; @@ -262,8 +249,16 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const { TransformCanvas transformCanvas(canvas); displayList->draw(&transformCanvas); } - canvas->drawImageRect(snapshotImage, bounds, bounds, sampling, &paint, - SkCanvas::kStrict_SrcRectConstraint); + + const StretchEffect& stretch = properties.layerProperties().getStretchEffect(); + if (stretch.isEmpty()) { + canvas->drawImageRect(snapshotImage, bounds, bounds, sampling, &paint, + SkCanvas::kStrict_SrcRectConstraint); + } else { + sk_sp<SkShader> stretchShader = stretch.getShader(snapshotImage); + paint.setShader(stretchShader); + canvas->drawRect(bounds, paint); + } if (!renderNode->getSkiaLayer()->hasRenderedSinceRepaint) { renderNode->getSkiaLayer()->hasRenderedSinceRepaint = true; |