Turn disable or delete optimizations that don't have any effect.
Recording gets a ~5% speedup.
BUG=skia:
R=robertphillips@google.com, mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/577673003
diff --git a/src/core/SkRecordOpts.cpp b/src/core/SkRecordOpts.cpp
index 47718e1..7c24a08 100644
--- a/src/core/SkRecordOpts.cpp
+++ b/src/core/SkRecordOpts.cpp
@@ -14,9 +14,13 @@
using namespace SkRecords;
void SkRecordOptimize(SkRecord* record) {
+ // This might be useful as a first pass in the future if we want to weed
+ // out junk for other optimization passes. Right now, nothing needs it,
+ // and the bounding box hierarchy will do the work of skipping no-op
+ // Save-NoDraw-Restore sequences better than we can here.
+ //SkRecordNoopSaveRestores(record);
+
SkRecordNoopSaveLayerDrawRestores(record);
- SkRecordNoopSaveRestores(record);
- SkRecordReduceDrawPosTextStrength(record);
}
// Most of the optimizations in this file are pattern-based. These are all defined as structs with:
@@ -147,47 +151,3 @@
apply(&pass, record);
}
-
-// Replaces DrawPosText with DrawPosTextH when all Y coordinates are equal.
-struct StrengthReducer {
- typedef Pattern1<Is<DrawPosText> > Pattern;
-
- bool onMatch(SkRecord* record, Pattern* pattern, unsigned begin, unsigned end) {
- SkASSERT(end == begin + 1);
- DrawPosText* draw = pattern->first<DrawPosText>();
-
- const unsigned points = draw->paint.countText(draw->text, draw->byteLength);
- if (points == 0) {
- return false; // No point (ha!).
- }
-
- const SkScalar firstY = draw->pos[0].fY;
- for (unsigned i = 1; i < points; i++) {
- if (draw->pos[i].fY != firstY) {
- return false; // Needs full power of DrawPosText.
- }
- }
- // All ys are the same. We can replace DrawPosText with DrawPosTextH.
-
- // draw->pos is points SkPoints, [(x,y),(x,y),(x,y),(x,y), ... ].
- // We're going to squint and look at that as 2*points SkScalars, [x,y,x,y,x,y,x,y, ...].
- // Then we'll rearrange things so all the xs are in order up front, clobbering the ys.
- SK_COMPILE_ASSERT(sizeof(SkPoint) == 2 * sizeof(SkScalar), SquintingIsNotSafe);
- SkScalar* scalars = &draw->pos[0].fX;
- for (unsigned i = 0; i < 2*points; i += 2) {
- scalars[i/2] = scalars[i];
- }
-
- // Extend lifetime of draw to the end of the loop so we can copy its paint.
- Adopted<DrawPosText> adopted(draw);
- SkNEW_PLACEMENT_ARGS(record->replace<DrawPosTextH>(begin, adopted),
- DrawPosTextH,
- (draw->paint, draw->text, draw->byteLength, scalars, firstY));
- return true;
- }
-};
-void SkRecordReduceDrawPosTextStrength(SkRecord* record) {
- StrengthReducer pass;
- apply(&pass, record);
-}
-
diff --git a/src/core/SkRecordOpts.h b/src/core/SkRecordOpts.h
index da72796..936eeff 100644
--- a/src/core/SkRecordOpts.h
+++ b/src/core/SkRecordOpts.h
@@ -20,7 +20,4 @@
// draw, and no-op the SaveLayer and Restore.
void SkRecordNoopSaveLayerDrawRestores(SkRecord*);
-// Convert DrawPosText to DrawPosTextH when all the Y coordinates are equal.
-void SkRecordReduceDrawPosTextStrength(SkRecord*);
-
#endif//SkRecordOpts_DEFINED
diff --git a/tests/RecordOptsTest.cpp b/tests/RecordOptsTest.cpp
index e17b5e6..c5c4471 100644
--- a/tests/RecordOptsTest.cpp
+++ b/tests/RecordOptsTest.cpp
@@ -16,30 +16,6 @@
static const int W = 1920, H = 1080;
-static void draw_pos_text(SkCanvas* canvas, const char* text, bool constantY) {
- const size_t len = strlen(text);
- SkAutoTMalloc<SkPoint> pos(len);
- for (size_t i = 0; i < len; i++) {
- pos[i].fX = (SkScalar)i;
- pos[i].fY = constantY ? SK_Scalar1 : (SkScalar)i;
- }
- canvas->drawPosText(text, len, pos, SkPaint());
-}
-
-DEF_TEST(RecordOpts_StrengthReduction, r) {
- SkRecord record;
- SkRecorder recorder(&record, W, H);
-
- // We can convert a drawPosText into a drawPosTextH when all the Ys are the same.
- draw_pos_text(&recorder, "This will be reduced to drawPosTextH.", true);
- draw_pos_text(&recorder, "This cannot be reduced to drawPosTextH.", false);
-
- SkRecordReduceDrawPosTextStrength(&record);
-
- assert_type<SkRecords::DrawPosTextH>(r, record, 0);
- assert_type<SkRecords::DrawPosText>(r, record, 1);
-}
-
DEF_TEST(RecordOpts_NoopDrawSaveRestore, r) {
SkRecord record;
SkRecorder recorder(&record, W, H);