summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2021-05-10 19:34:58 -0400
committer John Reck <jreck@google.com> 2021-05-11 12:26:52 -0400
commit09d9ccadc3fca9038c434542e5048058a5b47709 (patch)
tree288b6a99e576acfc108f04c97e1ae397ff40c322
parenta8427802f5e357a31fdcf575c7f373cdd9ff88f5 (diff)
Avoid creating a layer for linear stretch
Bug: 187718492 Test: manual logging no layer updates during benchmark Change-Id: I9a231625142e404882be6c53fa6d01b2fb81af1a
-rw-r--r--libs/hwui/RenderProperties.h2
-rw-r--r--libs/hwui/effects/StretchEffect.h6
-rw-r--r--libs/hwui/pipeline/skia/RenderNodeDrawable.cpp7
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()));