Index: tests/MatrixClipCollapseTest.cpp |
=================================================================== |
--- tests/MatrixClipCollapseTest.cpp (revision 13495) |
+++ tests/MatrixClipCollapseTest.cpp (working copy) |
@@ -129,10 +129,14 @@ |
kDrawVertices_DrawOpType, |
#endif |
- kLast_DrawOpType = kRect_DrawOpType |
+ 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, |
}; |
-static const int kDrawOpTypeCount = kLast_DrawOpType + 1; |
+static const int kNonSaveLayerDrawOpTypeCount = kLastNonSaveLayer_DrawOpType + 1; |
typedef void (*PFEmitMC)(SkCanvas* canvas, MatType mat, ClipType clip, |
DrawOpType draw, SkTDArray<DrawType>* expected, |
@@ -321,13 +325,13 @@ |
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); |
} |
@@ -342,13 +346,13 @@ |
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); |
@@ -365,15 +369,15 @@ |
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); |
@@ -390,14 +394,14 @@ |
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); |
@@ -465,22 +469,24 @@ |
bool needsSaveRestore = kNone_DrawOpType != draw && |
(kNone_MatType != mat || kNone_ClipType != clip); |
- if (needsSaveRestore) { |
- *expected->append() = SAVE_LAYER; |
+ if (kNone_MatType != mat || kNone_ClipType != clip) { |
+ *expected->append() = SAVE; |
} |
- (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these get fused into later ops |
+ (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, accumulatedClips+1); |
+ *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, accumulatedClips+2); |
+ (*emitMC)(canvas, mat, clip, draw, expected, 1); |
emit_draw(canvas, draw, expected); |
if (needsSaveRestore) { |
*expected->append() = RESTORE; |
} |
canvas->restore(); |
- if (needsSaveRestore) { |
+ *expected->append() = RESTORE; |
+ if (kNone_MatType != mat || kNone_ClipType != clip) { |
*expected->append() = RESTORE; |
} |
} |
@@ -501,35 +507,39 @@ |
bool needsSaveRestore = kNone_DrawOpType != draw && |
(kNone_MatType != mat || kNone_ClipType != clip); |
- // 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) |
+ if (kNone_MatType != mat || kNone_ClipType != clip) { |
+ *expected->append() = SAVE; |
+ } |
+ (*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); |
- (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these get fused into later ops |
- if (needsSaveRestore) { |
- *expected->append() = SAVE_LAYER; |
+ (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, 1); |
+ if (kNone_MatType != mat || kNone_ClipType != clip) { |
+ *expected->append() = SAVE; |
} |
+ *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, accumulatedClips+3); |
+ (*emitMC)(canvas, mat, clip, draw, expected, 1); |
emit_draw(canvas, draw, expected); |
if (needsSaveRestore) { |
*expected->append() = RESTORE; |
} |
- canvas->restore(); |
- if (needsSaveRestore) { |
+ canvas->restore(); // for saveLayer |
+ *expected->append() = RESTORE; // for saveLayer |
+ if (kNone_MatType != mat || kNone_ClipType != clip) { |
*expected->append() = RESTORE; |
} |
canvas->restore(); |
- |
// required to match forced SAVE_LAYER |
*expected->append() = RESTORE; |
+ if (kNone_MatType != mat || kNone_ClipType != clip) { |
+ *expected->append() = RESTORE; |
+ } |
} |
////////////////////////////////////////////////////////////////////////////// |
@@ -660,13 +670,14 @@ |
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 < kDrawOpTypeCount; ++n) { |
+ for (int n = 0; n < kNonSaveLayerDrawOpTypeCount; ++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; |