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
diff --git a/libs/hwui/effects/StretchEffect.cpp b/libs/hwui/effects/StretchEffect.cpp
index d7162b9..de14beb 100644
--- a/libs/hwui/effects/StretchEffect.cpp
+++ b/libs/hwui/effects/StretchEffect.cpp
@@ -171,13 +171,13 @@
static const float ZERO = 0.f;
static const float CONTENT_DISTANCE_STRETCHED = 1.f;
-sk_sp<SkImageFilter> StretchEffect::getImageFilter(const sk_sp<SkImage>& snapshotImage) const {
+sk_sp<SkShader> StretchEffect::getShader(const sk_sp<SkImage>& snapshotImage) const {
if (isEmpty()) {
return nullptr;
}
- if (mStretchFilter != nullptr) {
- return mStretchFilter;
+ if (mStretchShader != nullptr) {
+ return mStretchShader;
}
float viewportWidth = stretchArea.width();
@@ -212,10 +212,9 @@
mBuilder->uniform("viewportWidth").set(&viewportWidth, 1);
mBuilder->uniform("viewportHeight").set(&viewportHeight, 1);
- mStretchFilter = SkImageFilters::Shader(mBuilder->makeShader(nullptr, false),
- SkRect{0, 0, viewportWidth, viewportHeight});
+ mStretchShader = mBuilder->makeShader(nullptr, false);
- return mStretchFilter;
+ return mStretchShader;
}
sk_sp<SkRuntimeEffect> StretchEffect::getStretchEffect() {