Index: src/core/SkRecordOpts.cpp |
diff --git a/src/core/SkRecordOpts.cpp b/src/core/SkRecordOpts.cpp |
index 8faa45ce562201ac0c3029d06d2abf8f0f2acffe..9c5e8ad61821b8874d0571a137cea41ed1a9866a 100644 |
--- a/src/core/SkRecordOpts.cpp |
+++ b/src/core/SkRecordOpts.cpp |
@@ -25,33 +25,33 @@ void SkRecordOptimize(SkRecord* record) { |
} |
// Most of the optimizations in this file are pattern-based. These are all defined as structs with: |
-// - a Pattern typedef |
-// - a bool onMatch(SkRceord*, Pattern*, int begin, int end) method, |
+// - a Match typedef |
+// - a bool onMatch(SkRceord*, Match*, int begin, int end) method, |
// which returns true if it made changes and false if not. |
// Run a pattern-based optimization once across the SkRecord, returning true if it made any changes. |
-// It looks for spans which match Pass::Pattern, and when found calls onMatch() with the pattern, |
+// It looks for spans which match Pass::Match, and when found calls onMatch() with that pattern, |
// record, and [begin,end) span of the commands that matched. |
template <typename Pass> |
static bool apply(Pass* pass, SkRecord* record) { |
- typename Pass::Pattern pattern; |
+ typename Pass::Match match; |
bool changed = false; |
int begin, end = 0; |
- while (pattern.search(record, &begin, &end)) { |
- changed |= pass->onMatch(record, &pattern, begin, end); |
+ while (match.search(record, &begin, &end)) { |
+ changed |= pass->onMatch(record, &match, begin, end); |
} |
return changed; |
} |
// Turns the logical NoOp Save and Restore in Save-Draw*-Restore patterns into actual NoOps. |
struct SaveOnlyDrawsRestoreNooper { |
- typedef Pattern3<Is<Save>, |
- Star<Or<Is<NoOp>, IsDraw> >, |
- Is<Restore> > |
- Pattern; |
+ typedef Pattern<Is<Save>, |
+ Greedy<Or<Is<NoOp>, IsDraw>>, |
+ Is<Restore>> |
+ Match; |
- bool onMatch(SkRecord* record, Pattern* pattern, int begin, int end) { |
+ bool onMatch(SkRecord* record, Match*, int begin, int end) { |
record->replace<NoOp>(begin); // Save |
record->replace<NoOp>(end-1); // Restore |
return true; |
@@ -117,17 +117,17 @@ static bool fold_opacity_layer_color_to_paint(const SkPaint& layerPaint, |
// Turns logical no-op Save-[non-drawing command]*-Restore patterns into actual no-ops. |
struct SaveNoDrawsRestoreNooper { |
- // Star matches greedily, so we also have to exclude Save and Restore. |
+ // Greedy matches greedily, so we also have to exclude Save and Restore. |
// Nested SaveLayers need to be excluded, or we'll match their Restore! |
- typedef Pattern3<Is<Save>, |
- Star<Not<Or4<Is<Save>, |
+ typedef Pattern<Is<Save>, |
+ Greedy<Not<Or<Is<Save>, |
Is<SaveLayer>, |
Is<Restore>, |
- IsDraw> > >, |
- Is<Restore> > |
- Pattern; |
+ IsDraw>>>, |
+ Is<Restore>> |
+ Match; |
- bool onMatch(SkRecord* record, Pattern* pattern, int begin, int end) { |
+ bool onMatch(SkRecord* record, Match*, int begin, int end) { |
// The entire span between Save and Restore (inclusively) does nothing. |
for (int i = begin; i < end; i++) { |
record->replace<NoOp>(i); |
@@ -146,17 +146,17 @@ void SkRecordNoopSaveRestores(SkRecord* record) { |
// For some SaveLayer-[drawing command]-Restore patterns, merge the SaveLayer's alpha into the |
// draw, and no-op the SaveLayer and Restore. |
struct SaveLayerDrawRestoreNooper { |
- typedef Pattern3<Is<SaveLayer>, IsDraw, Is<Restore> > Pattern; |
+ typedef Pattern<Is<SaveLayer>, IsDraw, Is<Restore>> Match; |
- bool onMatch(SkRecord* record, Pattern* pattern, int begin, int end) { |
+ bool onMatch(SkRecord* record, Match* match, int begin, int end) { |
// A SaveLayer's bounds field is just a hint, so we should be free to ignore it. |
- SkPaint* layerPaint = pattern->first<SaveLayer>()->paint; |
+ SkPaint* layerPaint = match->first<SaveLayer>()->paint; |
if (nullptr == layerPaint) { |
// There wasn't really any point to this SaveLayer at all. |
return KillSaveLayerAndRestore(record, begin); |
} |
- SkPaint* drawPaint = pattern->second<SkPaint>(); |
+ SkPaint* drawPaint = match->second<SkPaint>(); |
if (drawPaint == nullptr) { |
// We can just give the draw the SaveLayer's paint. |
// TODO(mtklein): figure out how to do this clearly |
@@ -192,11 +192,11 @@ void SkRecordNoopSaveLayerDrawRestores(SkRecord* record) { |
Restore |
*/ |
struct SvgOpacityAndFilterLayerMergePass { |
- typedef Pattern7<Is<SaveLayer>, Is<Save>, Is<ClipRect>, Is<SaveLayer>, |
- Is<Restore>, Is<Restore>, Is<Restore> > Pattern; |
+ typedef Pattern<Is<SaveLayer>, Is<Save>, Is<ClipRect>, Is<SaveLayer>, |
+ Is<Restore>, Is<Restore>, Is<Restore>> Match; |
- bool onMatch(SkRecord* record, Pattern* pattern, int begin, int end) { |
- SkPaint* opacityPaint = pattern->first<SaveLayer>()->paint; |
+ bool onMatch(SkRecord* record, Match* match, int begin, int end) { |
+ SkPaint* opacityPaint = match->first<SaveLayer>()->paint; |
if (nullptr == opacityPaint) { |
// There wasn't really any point to this SaveLayer at all. |
return KillSaveLayerAndRestore(record, begin); |
@@ -204,7 +204,7 @@ struct SvgOpacityAndFilterLayerMergePass { |
// This layer typically contains a filter, but this should work for layers with for other |
// purposes too. |
- SkPaint* filterLayerPaint = pattern->fourth<SaveLayer>()->paint; |
+ SkPaint* filterLayerPaint = match->fourth<SaveLayer>()->paint; |
if (filterLayerPaint == nullptr) { |
// We can just give the inner SaveLayer the paint of the outer SaveLayer. |
// TODO(mtklein): figure out how to do this clearly |