Index: src/core/SkPicture.cpp |
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp |
index c7e36e7ecd2a6e99eb12b0395925dcda65a29657..871a62e8f36d4f8d184e71a24d688510ae9dd755 100644 |
--- a/src/core/SkPicture.cpp |
+++ b/src/core/SkPicture.cpp |
@@ -239,22 +239,31 @@ |
bool SkPicture::Analysis::suitableForGpuRasterization(const char** reason, |
int sampleCount) const { |
// TODO: the heuristic used here needs to be refined |
- static const int kNumSlowPathsTol = 6; |
- |
- int numSlowPathDashedPaths = fNumPaintWithPathEffectUses; |
- if (0 == sampleCount) { |
- // The fast dashing path only works when MSAA is disabled |
- numSlowPathDashedPaths -= fNumFastPathDashEffects; |
- } |
- |
- int numSlowPaths = fNumAAConcavePaths - |
- fNumAAHairlineConcavePaths - |
- fNumAADFEligibleConcavePaths; |
- |
- bool ret = numSlowPathDashedPaths + numSlowPaths < kNumSlowPathsTol; |
+ static const int kNumPaintWithPathEffectsUsesTol = 1; |
+ static const int kNumAAConcavePathsTol = 5; |
+ |
+ int numNonDashedPathEffects = fNumPaintWithPathEffectUses - |
+ fNumFastPathDashEffects; |
+ bool suitableForDash = (0 == fNumPaintWithPathEffectUses) || |
+ (numNonDashedPathEffects < kNumPaintWithPathEffectsUsesTol |
+ && 0 == sampleCount); |
+ |
+ bool ret = suitableForDash && |
+ (fNumAAConcavePaths - fNumAAHairlineConcavePaths - fNumAADFEligibleConcavePaths) |
+ < kNumAAConcavePathsTol; |
if (!ret && reason) { |
- *reason = "Too many slow paths (either concave or dashed)."; |
+ 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."; |
} |
return ret; |
} |