diff options
-rw-r--r-- | libs/hwui/RenderProperties.h | 2 | ||||
-rw-r--r-- | libs/hwui/effects/StretchEffect.h | 6 | ||||
-rw-r--r-- | libs/hwui/pipeline/skia/RenderNodeDrawable.cpp | 7 |
3 files changed, 8 insertions, 7 deletions
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h index 5540e2da78d9..cd622eba37b6 100644 --- a/libs/hwui/RenderProperties.h +++ b/libs/hwui/RenderProperties.h @@ -553,7 +553,7 @@ public: bool promotedToLayer() const { return mLayerProperties.mType == LayerType::None && fitsOnLayer() && (mComputedFields.mNeedLayerForFunctors || mLayerProperties.mImageFilter != nullptr || - !mLayerProperties.getStretchEffect().isEmpty() || + mLayerProperties.getStretchEffect().requiresLayer() || (!MathUtils::isZero(mPrimitiveFields.mAlpha) && mPrimitiveFields.mAlpha < 1 && mPrimitiveFields.mHasOverlappingRendering)); } diff --git a/libs/hwui/effects/StretchEffect.h b/libs/hwui/effects/StretchEffect.h index c49d53af94eb..3b3067d2717f 100644 --- a/libs/hwui/effects/StretchEffect.h +++ b/libs/hwui/effects/StretchEffect.h @@ -16,6 +16,7 @@ #pragma once +#include "Properties.h" #include "utils/MathUtils.h" #include <SkImage.h> @@ -108,6 +109,11 @@ public: return matrix; } + bool requiresLayer() const { + return !(isEmpty() || + Properties::stretchEffectBehavior == StretchEffectBehavior::LinearScale); + } + private: static sk_sp<SkRuntimeEffect> getStretchEffect(); mutable SkVector mStretchDirection{0, 0}; diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp index 57cdde2e8f10..0b43f0923434 100644 --- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp +++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp @@ -171,16 +171,11 @@ void RenderNodeDrawable::forceDraw(SkCanvas* canvas) const { displayList->mProjectedOutline = nullptr; } -static bool stretchNeedsLayer(const LayerProperties& properties) { - return Properties::stretchEffectBehavior != StretchEffectBehavior::LinearScale && - !properties.getStretchEffect().isEmpty(); -} - static bool layerNeedsPaint(const sk_sp<SkImage>& snapshotImage, const LayerProperties& properties, float alphaMultiplier, SkPaint* paint) { if (alphaMultiplier < 1.0f || properties.alpha() < 255 || properties.xferMode() != SkBlendMode::kSrcOver || properties.getColorFilter() != nullptr || - properties.getImageFilter() != nullptr || stretchNeedsLayer(properties)) { + properties.getImageFilter() != nullptr || properties.getStretchEffect().requiresLayer()) { paint->setAlpha(properties.alpha() * alphaMultiplier); paint->setBlendMode(properties.xferMode()); paint->setColorFilter(sk_ref_sp(properties.getColorFilter())); |