Index: tests/MatrixClipCollapseTest.cpp |
diff --git a/tests/MatrixClipCollapseTest.cpp b/tests/MatrixClipCollapseTest.cpp |
index 6981fe25d4d3b3c2ad4b7b9ae7fa6fce9b107788..d379e3351c76a4abd7850c2550be4da8656d47b9 100644 |
--- a/tests/MatrixClipCollapseTest.cpp |
+++ b/tests/MatrixClipCollapseTest.cpp |
@@ -129,14 +129,10 @@ enum DrawOpType { |
kDrawVertices_DrawOpType, |
#endif |
- kLastNonSaveLayer_DrawOpType = kRect_DrawOpType, |
- |
- // saveLayer's have to handled apart from the other draw operations |
- // since they also alter the save/restore structure. |
- kSaveLayer_DrawOpType, |
+ kLast_DrawOpType = kRect_DrawOpType |
}; |
-static const int kNonSaveLayerDrawOpTypeCount = kLastNonSaveLayer_DrawOpType + 1; |
+static const int kDrawOpTypeCount = kLast_DrawOpType + 1; |
typedef void (*PFEmitMC)(SkCanvas* canvas, MatType mat, ClipType clip, |
DrawOpType draw, SkTDArray<DrawType>* expected, |
@@ -325,13 +321,13 @@ static void emit_draw(SkCanvas* canvas, DrawOpType draw, SkTDArray<DrawType>* ex |
static void emit_clip_and_mat(SkCanvas* canvas, MatType mat, ClipType clip, |
DrawOpType draw, SkTDArray<DrawType>* expected, |
int accumulatedClips) { |
- emit_clip(canvas, clip); |
- emit_mat(canvas, mat); |
- |
if (kNone_DrawOpType == draw) { |
return; |
} |
+ emit_clip(canvas, clip); |
+ emit_mat(canvas, mat); |
+ |
for (int i = 0; i < accumulatedClips; ++i) { |
add_clip(clip, mat, expected); |
} |
@@ -346,13 +342,13 @@ static void emit_clip_and_mat(SkCanvas* canvas, MatType mat, ClipType clip, |
static void emit_mat_and_clip(SkCanvas* canvas, MatType mat, ClipType clip, |
DrawOpType draw, SkTDArray<DrawType>* expected, |
int accumulatedClips) { |
- emit_mat(canvas, mat); |
- emit_clip(canvas, clip); |
- |
if (kNone_DrawOpType == draw) { |
return; |
} |
+ emit_mat(canvas, mat); |
+ emit_clip(canvas, clip); |
+ |
// the matrix & clip order will be reversed once collapsed! |
for (int i = 0; i < accumulatedClips; ++i) { |
add_clip(clip, mat, expected); |
@@ -369,15 +365,15 @@ static void emit_mat_and_clip(SkCanvas* canvas, MatType mat, ClipType clip, |
static void emit_double_mat_and_clip(SkCanvas* canvas, MatType mat, ClipType clip, |
DrawOpType draw, SkTDArray<DrawType>* expected, |
int accumulatedClips) { |
+ if (kNone_DrawOpType == draw) { |
+ return; |
+ } |
+ |
emit_mat(canvas, mat); |
emit_clip(canvas, clip); |
emit_mat(canvas, mat); |
emit_clip(canvas, clip); |
- if (kNone_DrawOpType == draw) { |
- return; |
- } |
- |
for (int i = 0; i < accumulatedClips; ++i) { |
add_clip(clip, mat, expected); |
add_clip(clip, mat, expected); |
@@ -394,14 +390,14 @@ static void emit_double_mat_and_clip(SkCanvas* canvas, MatType mat, ClipType cli |
static void emit_mat_clip_clip(SkCanvas* canvas, MatType mat, ClipType clip, |
DrawOpType draw, SkTDArray<DrawType>* expected, |
int accumulatedClips) { |
- emit_mat(canvas, mat); |
- emit_clip(canvas, clip); |
- emit_clip(canvas, clip); |
- |
if (kNone_DrawOpType == draw) { |
return; |
} |
+ emit_mat(canvas, mat); |
+ emit_clip(canvas, clip); |
+ emit_clip(canvas, clip); |
+ |
for (int i = 0; i < accumulatedClips; ++i) { |
add_clip(clip, mat, expected); |
add_clip(clip, mat, expected); |
@@ -469,24 +465,22 @@ static void emit_body2(SkCanvas* canvas, PFEmitMC emitMC, MatType mat, |
bool needsSaveRestore = kNone_DrawOpType != draw && |
(kNone_MatType != mat || kNone_ClipType != clip); |
- if (kNone_MatType != mat || kNone_ClipType != clip) { |
- *expected->append() = SAVE; |
+ if (needsSaveRestore) { |
+ *expected->append() = SAVE_LAYER; |
} |
- (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, accumulatedClips+1); |
- *expected->append() = SAVE_LAYER; |
+ (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these get fused into later ops |
// TODO: widen testing to exercise saveLayer's parameters |
canvas->saveLayer(NULL, NULL); |
if (needsSaveRestore) { |
*expected->append() = SAVE; |
} |
- (*emitMC)(canvas, mat, clip, draw, expected, 1); |
+ (*emitMC)(canvas, mat, clip, draw, expected, accumulatedClips+2); |
emit_draw(canvas, draw, expected); |
if (needsSaveRestore) { |
*expected->append() = RESTORE; |
} |
canvas->restore(); |
- *expected->append() = RESTORE; |
- if (kNone_MatType != mat || kNone_ClipType != clip) { |
+ if (needsSaveRestore) { |
*expected->append() = RESTORE; |
} |
} |
@@ -507,39 +501,35 @@ static void emit_body3(SkCanvas* canvas, PFEmitMC emitMC, MatType mat, |
bool needsSaveRestore = kNone_DrawOpType != draw && |
(kNone_MatType != mat || kNone_ClipType != clip); |
- if (kNone_MatType != mat || kNone_ClipType != clip) { |
- *expected->append() = SAVE; |
- } |
- (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, accumulatedClips+1); |
+ // This saveLayer will always be forced b.c. we currently can't tell |
+ // ahead of time if it will be empty (see comment in SkMatrixClipStateMgr::save) |
*expected->append() = SAVE_LAYER; |
+ |
+ (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these get fused into later ops |
// TODO: widen testing to exercise saveLayer's parameters |
canvas->saveLayer(NULL, NULL); |
- (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, 1); |
- if (kNone_MatType != mat || kNone_ClipType != clip) { |
- *expected->append() = SAVE; |
+ (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these get fused into later ops |
+ if (needsSaveRestore) { |
+ *expected->append() = SAVE_LAYER; |
} |
- *expected->append() = SAVE_LAYER; |
// TODO: widen testing to exercise saveLayer's parameters |
canvas->saveLayer(NULL, NULL); |
if (needsSaveRestore) { |
*expected->append() = SAVE; |
} |
- (*emitMC)(canvas, mat, clip, draw, expected, 1); |
+ (*emitMC)(canvas, mat, clip, draw, expected, accumulatedClips+3); |
emit_draw(canvas, draw, expected); |
if (needsSaveRestore) { |
*expected->append() = RESTORE; |
} |
- canvas->restore(); // for saveLayer |
- *expected->append() = RESTORE; // for saveLayer |
- if (kNone_MatType != mat || kNone_ClipType != clip) { |
+ canvas->restore(); |
+ if (needsSaveRestore) { |
*expected->append() = RESTORE; |
} |
canvas->restore(); |
+ |
// required to match forced SAVE_LAYER |
*expected->append() = RESTORE; |
- if (kNone_MatType != mat || kNone_ClipType != clip) { |
- *expected->append() = RESTORE; |
- } |
} |
////////////////////////////////////////////////////////////////////////////// |
@@ -670,14 +660,13 @@ static void test_collapse(skiatest::Reporter* reporter) { |
for (size_t k = 0; k < SK_ARRAY_COUNT(gMCs); ++k) { |
for (int l = 0; l < kMatTypeCount; ++l) { |
for (int m = 0; m < kClipTypeCount; ++m) { |
- for (int n = 0; n < kNonSaveLayerDrawOpTypeCount; ++n) { |
+ for (int n = 0; n < kDrawOpTypeCount; ++n) { |
#ifdef TEST_COLLAPSE_MATRIX_CLIP_STATE |
static int testID = -1; |
++testID; |
if (testID < -1) { |
continue; |
} |
- SkDebugf("test: %d\n", testID); |
#endif |
SkTDArray<DrawType> expected, actual; |