Inline fast path for GrPaint::isConstantBlendedColor when no color FPs and src-over blend.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2236423002
Review-Url: https://codereview.chromium.org/2236423002
diff --git a/include/gpu/GrPaint.h b/include/gpu/GrPaint.h
index ca9ba59..0085604 100644
--- a/include/gpu/GrPaint.h
+++ b/include/gpu/GrPaint.h
@@ -166,9 +166,21 @@
* coverage and color, so the actual values written to pixels with partial coverage may still
* not seem constant, even if this function returns true.
*/
- bool isConstantBlendedColor(GrColor* constantColor) const;
+ bool isConstantBlendedColor(GrColor* constantColor) const {
+ GrColor paintColor = this->getColor();
+ if (!fXPFactory && fColorFragmentProcessors.empty()) {
+ if (!GrColorIsOpaque(paintColor)) {
+ return false;
+ }
+ *constantColor = paintColor;
+ return true;
+ }
+ return this->internalIsConstantBlendedColor(paintColor, constantColor);
+ }
private:
+ bool internalIsConstantBlendedColor(GrColor paintColor, GrColor* constantColor) const;
+
mutable sk_sp<GrXPFactory> fXPFactory;
SkSTArray<4, sk_sp<GrFragmentProcessor>> fColorFragmentProcessors;
SkSTArray<2, sk_sp<GrFragmentProcessor>> fCoverageFragmentProcessors;
diff --git a/src/gpu/GrPaint.cpp b/src/gpu/GrPaint.cpp
index 7bf9b6d..d33881c 100644
--- a/src/gpu/GrPaint.cpp
+++ b/src/gpu/GrPaint.cpp
@@ -51,11 +51,11 @@
params));
}
-bool GrPaint::isConstantBlendedColor(GrColor* color) const {
+bool GrPaint::internalIsConstantBlendedColor(GrColor paintColor, GrColor* color) const {
GrProcOptInfo colorProcInfo;
colorProcInfo.calcWithInitialValues(
sk_sp_address_as_pointer_address(fColorFragmentProcessors.begin()),
- this->numColorFragmentProcessors(), this->getColor(), kRGBA_GrColorComponentFlags, false);
+ this->numColorFragmentProcessors(), paintColor, kRGBA_GrColorComponentFlags, false);
GrXPFactory::InvariantBlendedColor blendedColor;
if (fXPFactory) {