| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "Test.h" | 8 #include "Test.h" |
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkDebugCanvas.h" | 10 #include "SkDebugCanvas.h" |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 r.setRects(rects, 2); | 185 r.setRects(rects, 2); |
| 186 canvas->clipRegion(r, SkRegion::kIntersect_Op); | 186 canvas->clipRegion(r, SkRegion::kIntersect_Op); |
| 187 break; | 187 break; |
| 188 } | 188 } |
| 189 default: | 189 default: |
| 190 SkASSERT(0); | 190 SkASSERT(0); |
| 191 } | 191 } |
| 192 } | 192 } |
| 193 | 193 |
| 194 static void add_clip(ClipType clip, MatType mat, SkTDArray<DrawType>* expected)
{ | 194 static void add_clip(ClipType clip, MatType mat, SkTDArray<DrawType>* expected)
{ |
| 195 if (NULL == expected) { | 195 if (nullptr == expected) { |
| 196 // expected is NULL if this clip will be fused into later clips | 196 // expected is nullptr if this clip will be fused into later clips |
| 197 return; | 197 return; |
| 198 } | 198 } |
| 199 | 199 |
| 200 switch (clip) { | 200 switch (clip) { |
| 201 case kNone_ClipType: | 201 case kNone_ClipType: |
| 202 break; | 202 break; |
| 203 case kRect_ClipType: | 203 case kRect_ClipType: |
| 204 *expected->append() = CONCAT; | 204 *expected->append() = CONCAT; |
| 205 *expected->append() = CLIP_RECT; | 205 *expected->append() = CLIP_RECT; |
| 206 break; | 206 break; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 m.setTranslate(1.0f, 1.0f); | 248 m.setTranslate(1.0f, 1.0f); |
| 249 canvas->setMatrix(m); | 249 canvas->setMatrix(m); |
| 250 break; | 250 break; |
| 251 } | 251 } |
| 252 default: | 252 default: |
| 253 SkASSERT(0); | 253 SkASSERT(0); |
| 254 } | 254 } |
| 255 } | 255 } |
| 256 | 256 |
| 257 static void add_mat(MatType mat, SkTDArray<DrawType>* expected) { | 257 static void add_mat(MatType mat, SkTDArray<DrawType>* expected) { |
| 258 if (NULL == expected) { | 258 if (nullptr == expected) { |
| 259 // expected is NULL if this matrix call will be fused into later ones | 259 // expected is nullptr if this matrix call will be fused into later ones |
| 260 return; | 260 return; |
| 261 } | 261 } |
| 262 | 262 |
| 263 switch (mat) { | 263 switch (mat) { |
| 264 case kNone_MatType: | 264 case kNone_MatType: |
| 265 break; | 265 break; |
| 266 case kTranslate_MatType: // fall thru | 266 case kTranslate_MatType: // fall thru |
| 267 case kScale_MatType: // fall thru | 267 case kScale_MatType: // fall thru |
| 268 case kSkew_MatType: // fall thru | 268 case kSkew_MatType: // fall thru |
| 269 case kRotate_MatType: // fall thru | 269 case kRotate_MatType: // fall thru |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 SkTDArray<DrawType>* expected, int accumulatedClips) { | 468 SkTDArray<DrawType>* expected, int accumulatedClips) { |
| 469 bool needsSaveRestore = kNone_DrawOpType != draw && | 469 bool needsSaveRestore = kNone_DrawOpType != draw && |
| 470 (kNone_MatType != mat || kNone_ClipType != clip); | 470 (kNone_MatType != mat || kNone_ClipType != clip); |
| 471 | 471 |
| 472 if (kNone_MatType != mat || kNone_ClipType != clip) { | 472 if (kNone_MatType != mat || kNone_ClipType != clip) { |
| 473 *expected->append() = SAVE; | 473 *expected->append() = SAVE; |
| 474 } | 474 } |
| 475 (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, accumulatedCli
ps+1); | 475 (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, accumulatedCli
ps+1); |
| 476 *expected->append() = SAVE_LAYER; | 476 *expected->append() = SAVE_LAYER; |
| 477 // TODO: widen testing to exercise saveLayer's parameters | 477 // TODO: widen testing to exercise saveLayer's parameters |
| 478 canvas->saveLayer(NULL, NULL); | 478 canvas->saveLayer(nullptr, nullptr); |
| 479 if (needsSaveRestore) { | 479 if (needsSaveRestore) { |
| 480 *expected->append() = SAVE; | 480 *expected->append() = SAVE; |
| 481 } | 481 } |
| 482 (*emitMC)(canvas, mat, clip, draw, expected, 1); | 482 (*emitMC)(canvas, mat, clip, draw, expected, 1); |
| 483 emit_draw(canvas, draw, expected); | 483 emit_draw(canvas, draw, expected); |
| 484 if (needsSaveRestore) { | 484 if (needsSaveRestore) { |
| 485 *expected->append() = RESTORE; | 485 *expected->append() = RESTORE; |
| 486 } | 486 } |
| 487 canvas->restore(); | 487 canvas->restore(); |
| 488 *expected->append() = RESTORE; | 488 *expected->append() = RESTORE; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 506 SkTDArray<DrawType>* expected, int accumulatedClips) { | 506 SkTDArray<DrawType>* expected, int accumulatedClips) { |
| 507 bool needsSaveRestore = kNone_DrawOpType != draw && | 507 bool needsSaveRestore = kNone_DrawOpType != draw && |
| 508 (kNone_MatType != mat || kNone_ClipType != clip); | 508 (kNone_MatType != mat || kNone_ClipType != clip); |
| 509 | 509 |
| 510 if (kNone_MatType != mat || kNone_ClipType != clip) { | 510 if (kNone_MatType != mat || kNone_ClipType != clip) { |
| 511 *expected->append() = SAVE; | 511 *expected->append() = SAVE; |
| 512 } | 512 } |
| 513 (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, accumulatedCli
ps+1); | 513 (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, accumulatedCli
ps+1); |
| 514 *expected->append() = SAVE_LAYER; | 514 *expected->append() = SAVE_LAYER; |
| 515 // TODO: widen testing to exercise saveLayer's parameters | 515 // TODO: widen testing to exercise saveLayer's parameters |
| 516 canvas->saveLayer(NULL, NULL); | 516 canvas->saveLayer(nullptr, nullptr); |
| 517 (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, 1); | 517 (*emitMC)(canvas, mat, clip, kSaveLayer_DrawOpType, expected, 1); |
| 518 if (kNone_MatType != mat || kNone_ClipType != clip) { | 518 if (kNone_MatType != mat || kNone_ClipType != clip) { |
| 519 *expected->append() = SAVE; | 519 *expected->append() = SAVE; |
| 520 } | 520 } |
| 521 *expected->append() = SAVE_LAYER; | 521 *expected->append() = SAVE_LAYER; |
| 522 // TODO: widen testing to exercise saveLayer's parameters | 522 // TODO: widen testing to exercise saveLayer's parameters |
| 523 canvas->saveLayer(NULL, NULL); | 523 canvas->saveLayer(nullptr, nullptr); |
| 524 if (needsSaveRestore) { | 524 if (needsSaveRestore) { |
| 525 *expected->append() = SAVE; | 525 *expected->append() = SAVE; |
| 526 } | 526 } |
| 527 (*emitMC)(canvas, mat, clip, draw, expected, 1); | 527 (*emitMC)(canvas, mat, clip, draw, expected, 1); |
| 528 emit_draw(canvas, draw, expected); | 528 emit_draw(canvas, draw, expected); |
| 529 if (needsSaveRestore) { | 529 if (needsSaveRestore) { |
| 530 *expected->append() = RESTORE; | 530 *expected->append() = RESTORE; |
| 531 } | 531 } |
| 532 canvas->restore(); // for saveLayer | 532 canvas->restore(); // for saveLayer |
| 533 *expected->append() = RESTORE; // for saveLayer | 533 *expected->append() = RESTORE; // for saveLayer |
| (...skipping 28 matching lines...) Expand all Loading... |
| 562 // Save | 562 // Save |
| 563 // some body | 563 // some body |
| 564 // Restore | 564 // Restore |
| 565 // matrix & clip calls (will be ignored) | 565 // matrix & clip calls (will be ignored) |
| 566 // Restore | 566 // Restore |
| 567 // Note: the outer save/restore are provided by beginRecording/endRecording | 567 // Note: the outer save/restore are provided by beginRecording/endRecording |
| 568 static void emit_struct1(SkCanvas* canvas, | 568 static void emit_struct1(SkCanvas* canvas, |
| 569 PFEmitMC emitMC, MatType mat, ClipType clip, | 569 PFEmitMC emitMC, MatType mat, ClipType clip, |
| 570 PFEmitBody emitBody, DrawOpType draw, | 570 PFEmitBody emitBody, DrawOpType draw, |
| 571 SkTDArray<DrawType>* expected) { | 571 SkTDArray<DrawType>* expected) { |
| 572 (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these get fused into later o
ps | 572 (*emitMC)(canvas, mat, clip, draw, nullptr, 0); // these get fused into late
r ops |
| 573 canvas->save(); | 573 canvas->save(); |
| 574 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); | 574 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); |
| 575 canvas->restore(); | 575 canvas->restore(); |
| 576 (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these will get removed | 576 (*emitMC)(canvas, mat, clip, draw, nullptr, 0); // these will get removed |
| 577 } | 577 } |
| 578 | 578 |
| 579 // Emit: | 579 // Emit: |
| 580 // Save | 580 // Save |
| 581 // matrix & clip calls | 581 // matrix & clip calls |
| 582 // Save | 582 // Save |
| 583 // some body | 583 // some body |
| 584 // Restore | 584 // Restore |
| 585 // Save | 585 // Save |
| 586 // some body | 586 // some body |
| 587 // Restore | 587 // Restore |
| 588 // matrix & clip calls (will be ignored) | 588 // matrix & clip calls (will be ignored) |
| 589 // Restore | 589 // Restore |
| 590 // Note: the outer save/restore are provided by beginRecording/endRecording | 590 // Note: the outer save/restore are provided by beginRecording/endRecording |
| 591 static void emit_struct2(SkCanvas* canvas, | 591 static void emit_struct2(SkCanvas* canvas, |
| 592 PFEmitMC emitMC, MatType mat, ClipType clip, | 592 PFEmitMC emitMC, MatType mat, ClipType clip, |
| 593 PFEmitBody emitBody, DrawOpType draw, | 593 PFEmitBody emitBody, DrawOpType draw, |
| 594 SkTDArray<DrawType>* expected) { | 594 SkTDArray<DrawType>* expected) { |
| 595 (*emitMC)(canvas, mat, clip, draw, NULL, 1); // these will get fused into la
ter ops | 595 (*emitMC)(canvas, mat, clip, draw, nullptr, 1); // these will get fused into
later ops |
| 596 canvas->save(); | 596 canvas->save(); |
| 597 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); | 597 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); |
| 598 canvas->restore(); | 598 canvas->restore(); |
| 599 canvas->save(); | 599 canvas->save(); |
| 600 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); | 600 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); |
| 601 canvas->restore(); | 601 canvas->restore(); |
| 602 (*emitMC)(canvas, mat, clip, draw, NULL, 1); // these will get removed | 602 (*emitMC)(canvas, mat, clip, draw, nullptr, 1); // these will get removed |
| 603 } | 603 } |
| 604 | 604 |
| 605 // Emit: | 605 // Emit: |
| 606 // Save | 606 // Save |
| 607 // matrix & clip calls | 607 // matrix & clip calls |
| 608 // Save | 608 // Save |
| 609 // some body | 609 // some body |
| 610 // Restore | 610 // Restore |
| 611 // Save | 611 // Save |
| 612 // matrix & clip calls | 612 // matrix & clip calls |
| 613 // Save | 613 // Save |
| 614 // some body | 614 // some body |
| 615 // Restore | 615 // Restore |
| 616 // Restore | 616 // Restore |
| 617 // matrix & clip calls (will be ignored) | 617 // matrix & clip calls (will be ignored) |
| 618 // Restore | 618 // Restore |
| 619 // Note: the outer save/restore are provided by beginRecording/endRecording | 619 // Note: the outer save/restore are provided by beginRecording/endRecording |
| 620 static void emit_struct3(SkCanvas* canvas, | 620 static void emit_struct3(SkCanvas* canvas, |
| 621 PFEmitMC emitMC, MatType mat, ClipType clip, | 621 PFEmitMC emitMC, MatType mat, ClipType clip, |
| 622 PFEmitBody emitBody, DrawOpType draw, | 622 PFEmitBody emitBody, DrawOpType draw, |
| 623 SkTDArray<DrawType>* expected) { | 623 SkTDArray<DrawType>* expected) { |
| 624 (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these will get fused into la
ter ops | 624 (*emitMC)(canvas, mat, clip, draw, nullptr, 0); // these will get fused into
later ops |
| 625 canvas->save(); | 625 canvas->save(); |
| 626 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); | 626 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 1); |
| 627 canvas->restore(); | 627 canvas->restore(); |
| 628 canvas->save(); | 628 canvas->save(); |
| 629 (*emitMC)(canvas, mat, clip, draw, NULL, 1); // these will get fused int
o later ops | 629 (*emitMC)(canvas, mat, clip, draw, nullptr, 1); // these will get fused
into later ops |
| 630 canvas->save(); | 630 canvas->save(); |
| 631 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 2); | 631 (*emitBody)(canvas, emitMC, mat, clip, draw, expected, 2); |
| 632 canvas->restore(); | 632 canvas->restore(); |
| 633 canvas->restore(); | 633 canvas->restore(); |
| 634 (*emitMC)(canvas, mat, clip, draw, NULL, 0); // these will get removed | 634 (*emitMC)(canvas, mat, clip, draw, nullptr, 0); // these will get removed |
| 635 } | 635 } |
| 636 | 636 |
| 637 ////////////////////////////////////////////////////////////////////////////// | 637 ////////////////////////////////////////////////////////////////////////////// |
| 638 | 638 |
| 639 #ifdef SK_COLLAPSE_MATRIX_CLIP_STATE | 639 #ifdef SK_COLLAPSE_MATRIX_CLIP_STATE |
| 640 static void print(const SkTDArray<DrawType>& expected, const SkTDArray<DrawType>
& actual) { | 640 static void print(const SkTDArray<DrawType>& expected, const SkTDArray<DrawType>
& actual) { |
| 641 SkDebugf("\n\nexpected %d --- actual %d\n", expected.count(), actual.count()
); | 641 SkDebugf("\n\nexpected %d --- actual %d\n", expected.count(), actual.count()
); |
| 642 int max = SkMax32(expected.count(), actual.count()); | 642 int max = SkMax32(expected.count(), actual.count()); |
| 643 | 643 |
| 644 for (int i = 0; i < max; ++i) { | 644 for (int i = 0; i < max; ++i) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 } | 721 } |
| 722 } | 722 } |
| 723 } | 723 } |
| 724 } | 724 } |
| 725 | 725 |
| 726 DEF_TEST(MatrixClipCollapse, reporter) { | 726 DEF_TEST(MatrixClipCollapse, reporter) { |
| 727 test_collapse(reporter); | 727 test_collapse(reporter); |
| 728 } | 728 } |
| 729 | 729 |
| 730 #endif | 730 #endif |
| OLD | NEW |