Alter gpu veto
This CL unifies the treatment of the dashed and concave paths.
Before:
TP 28 FP 15 TN 8 FN 3 IND 3
After:
TP 28 FP 18 TN 7 FN 2 IND 2
One of the TrueNegatives that became a FalsePositive was the motivation use case (the Chromium busy spinner).
Review URL: https://codereview.chromium.org/875913002
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index 871a62e..c7e36e7 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -239,31 +239,22 @@
bool SkPicture::Analysis::suitableForGpuRasterization(const char** reason,
int sampleCount) const {
// TODO: the heuristic used here needs to be refined
- static const int kNumPaintWithPathEffectsUsesTol = 1;
- static const int kNumAAConcavePathsTol = 5;
+ static const int kNumSlowPathsTol = 6;
- int numNonDashedPathEffects = fNumPaintWithPathEffectUses -
- fNumFastPathDashEffects;
- bool suitableForDash = (0 == fNumPaintWithPathEffectUses) ||
- (numNonDashedPathEffects < kNumPaintWithPathEffectsUsesTol
- && 0 == sampleCount);
+ int numSlowPathDashedPaths = fNumPaintWithPathEffectUses;
+ if (0 == sampleCount) {
+ // The fast dashing path only works when MSAA is disabled
+ numSlowPathDashedPaths -= fNumFastPathDashEffects;
+ }
- bool ret = suitableForDash &&
- (fNumAAConcavePaths - fNumAAHairlineConcavePaths - fNumAADFEligibleConcavePaths)
- < kNumAAConcavePathsTol;
+ int numSlowPaths = fNumAAConcavePaths -
+ fNumAAHairlineConcavePaths -
+ fNumAADFEligibleConcavePaths;
+
+ bool ret = numSlowPathDashedPaths + numSlowPaths < kNumSlowPathsTol;
if (!ret && reason) {
- if (!suitableForDash) {
- if (0 != sampleCount) {
- *reason = "Can't use multisample on dash effect.";
- } else {
- *reason = "Too many non dashed path effects.";
- }
- } else if ((fNumAAConcavePaths - fNumAAHairlineConcavePaths - fNumAADFEligibleConcavePaths)
- >= kNumAAConcavePathsTol)
- *reason = "Too many anti-aliased concave paths.";
- else
- *reason = "Unknown reason for GPU unsuitability.";
+ *reason = "Too many slow paths (either concave or dashed).";
}
return ret;
}