Index: src/core/SkPicture.cpp |
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp |
index 871a62e8f36d4f8d184e71a24d688510ae9dd755..c7e36e7ecd2a6e99eb12b0395925dcda65a29657 100644 |
--- a/src/core/SkPicture.cpp |
+++ b/src/core/SkPicture.cpp |
@@ -239,31 +239,22 @@ SkPicture::Analysis::Analysis(const SkRecord& record) { |
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; |
+ } |
+ |
+ int numSlowPaths = fNumAAConcavePaths - |
+ fNumAAHairlineConcavePaths - |
+ fNumAADFEligibleConcavePaths; |
- bool ret = suitableForDash && |
- (fNumAAConcavePaths - fNumAAHairlineConcavePaths - fNumAADFEligibleConcavePaths) |
- < kNumAAConcavePathsTol; |
+ 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; |
} |