summaryrefslogtreecommitdiff
path: root/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
diff options
context:
space:
mode:
authorNader Jawad <njawad@google.com>2021-04-07 16:05:13 -0700
committerNader Jawad <njawad@google.com>2021-04-07 16:07:00 -0700
commit8f5d66b748b82bc0b45c2f261ec87e8fe81b2efd (patch)
tree5caad6064192412d570ca448a86580a234f01b41 /libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
parent41a5cb8946256d50bb0e60a3e63e5de42761e1a2 (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.cpp27
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;