| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 /* Description: | 8 /* Description: |
| 9 * This test defines a series of elementatry test steps that perform | 9 * This test defines a series of elementatry test steps that perform |
| 10 * a single or a small group of canvas API calls. Each test step is | 10 * a single or a small group of canvas API calls. Each test step is |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "SkDevice.h" | 49 #include "SkDevice.h" |
| 50 #include "SkMatrix.h" | 50 #include "SkMatrix.h" |
| 51 #include "SkNWayCanvas.h" | 51 #include "SkNWayCanvas.h" |
| 52 #include "SkPDFDevice.h" | 52 #include "SkPDFDevice.h" |
| 53 #include "SkPDFDocument.h" | 53 #include "SkPDFDocument.h" |
| 54 #include "SkPaint.h" | 54 #include "SkPaint.h" |
| 55 #include "SkPath.h" | 55 #include "SkPath.h" |
| 56 #include "SkPicture.h" | 56 #include "SkPicture.h" |
| 57 #include "SkPictureRecord.h" | 57 #include "SkPictureRecord.h" |
| 58 #include "SkPictureRecorder.h" | 58 #include "SkPictureRecorder.h" |
| 59 #include "SkProxyCanvas.h" | |
| 60 #include "SkRect.h" | 59 #include "SkRect.h" |
| 61 #include "SkRegion.h" | 60 #include "SkRegion.h" |
| 62 #include "SkShader.h" | 61 #include "SkShader.h" |
| 63 #include "SkStream.h" | 62 #include "SkStream.h" |
| 64 #include "SkSurface.h" | 63 #include "SkSurface.h" |
| 65 #include "SkTDArray.h" | 64 #include "SkTDArray.h" |
| 66 #include "Test.h" | 65 #include "Test.h" |
| 67 | 66 |
| 68 static const int kWidth = 2, kHeight = 2; | 67 static const int kWidth = 2, kHeight = 2; |
| 69 | 68 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 // Format strings that describe the test context. The %s token is where | 221 // Format strings that describe the test context. The %s token is where |
| 223 // the name of the test step is inserted. The context is required for | 222 // the name of the test step is inserted. The context is required for |
| 224 // disambiguating the error in the case of failures that are reported in | 223 // disambiguating the error in the case of failures that are reported in |
| 225 // functions that are called multiple times in different contexts (test | 224 // functions that are called multiple times in different contexts (test |
| 226 // cases and test steps). | 225 // cases and test steps). |
| 227 static const char* const kDefaultAssertMessageFormat = "%s"; | 226 static const char* const kDefaultAssertMessageFormat = "%s"; |
| 228 static const char* const kCanvasDrawAssertMessageFormat = | 227 static const char* const kCanvasDrawAssertMessageFormat = |
| 229 "Drawing test step %s with SkCanvas"; | 228 "Drawing test step %s with SkCanvas"; |
| 230 static const char* const kDeferredDrawAssertMessageFormat = | 229 static const char* const kDeferredDrawAssertMessageFormat = |
| 231 "Drawing test step %s with SkDeferredCanvas"; | 230 "Drawing test step %s with SkDeferredCanvas"; |
| 232 static const char* const kProxyDrawAssertMessageFormat = | |
| 233 "Drawing test step %s with SkProxyCanvas"; | |
| 234 static const char* const kNWayDrawAssertMessageFormat = | 231 static const char* const kNWayDrawAssertMessageFormat = |
| 235 "Drawing test step %s with SkNWayCanvas"; | 232 "Drawing test step %s with SkNWayCanvas"; |
| 236 static const char* const kDeferredPreFlushAssertMessageFormat = | 233 static const char* const kDeferredPreFlushAssertMessageFormat = |
| 237 "test step %s, SkDeferredCanvas state consistency before flush"; | 234 "test step %s, SkDeferredCanvas state consistency before flush"; |
| 238 static const char* const kDeferredPostFlushPlaybackAssertMessageFormat = | 235 static const char* const kDeferredPostFlushPlaybackAssertMessageFormat = |
| 239 "test step %s, SkDeferredCanvas playback canvas state consistency after flus
h"; | 236 "test step %s, SkDeferredCanvas playback canvas state consistency after flus
h"; |
| 240 static const char* const kDeferredPostSilentFlushPlaybackAssertMessageFormat = | 237 static const char* const kDeferredPostSilentFlushPlaybackAssertMessageFormat = |
| 241 "test step %s, SkDeferredCanvas playback canvas state consistency after sile
nt flush"; | 238 "test step %s, SkDeferredCanvas playback canvas state consistency after sile
nt flush"; |
| 242 static const char* const kProxyStateAssertMessageFormat = | |
| 243 "test step %s, SkProxyCanvas state consistency"; | |
| 244 static const char* const kProxyIndirectStateAssertMessageFormat = | |
| 245 "test step %s, SkProxyCanvas indirect canvas state consistency"; | |
| 246 static const char* const kNWayStateAssertMessageFormat = | 239 static const char* const kNWayStateAssertMessageFormat = |
| 247 "test step %s, SkNWayCanvas state consistency"; | 240 "test step %s, SkNWayCanvas state consistency"; |
| 248 static const char* const kNWayIndirect1StateAssertMessageFormat = | 241 static const char* const kNWayIndirect1StateAssertMessageFormat = |
| 249 "test step %s, SkNWayCanvas indirect canvas 1 state consistency"; | 242 "test step %s, SkNWayCanvas indirect canvas 1 state consistency"; |
| 250 static const char* const kNWayIndirect2StateAssertMessageFormat = | 243 static const char* const kNWayIndirect2StateAssertMessageFormat = |
| 251 "test step %s, SkNWayCanvas indirect canvas 2 state consistency"; | 244 "test step %s, SkNWayCanvas indirect canvas 2 state consistency"; |
| 252 static const char* const kPdfAssertMessageFormat = | 245 static const char* const kPdfAssertMessageFormat = |
| 253 "PDF sanity check failed %s"; | 246 "PDF sanity check failed %s"; |
| 254 | 247 |
| 255 class CanvasTestStep; | 248 class CanvasTestStep; |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 // Issue: http://code.google.com/p/skia/issues/detail?id=496 | 605 // Issue: http://code.google.com/p/skia/issues/detail?id=496 |
| 613 /* | 606 /* |
| 614 testStep->setAssertMessageFormat(kDeferredPostFlushAssertMessageFormat); | 607 testStep->setAssertMessageFormat(kDeferredPostFlushAssertMessageFormat); |
| 615 AssertCanvasStatesEqual(reporter, &deferredCanvas, &referenceCanvas, | 608 AssertCanvasStatesEqual(reporter, &deferredCanvas, &referenceCanvas, |
| 616 testStep); | 609 testStep); |
| 617 */ | 610 */ |
| 618 } | 611 } |
| 619 }; | 612 }; |
| 620 | 613 |
| 621 // unused | 614 // unused |
| 622 static void TestProxyCanvasStateConsistency( | |
| 623 skiatest::Reporter* reporter, | |
| 624 const TestData& d, | |
| 625 CanvasTestStep* testStep, | |
| 626 const SkCanvas& referenceCanvas) { | |
| 627 | |
| 628 SkBitmap indirectStore; | |
| 629 createBitmap(&indirectStore, 0xFFFFFFFF); | |
| 630 SkCanvas indirectCanvas(indirectStore); | |
| 631 SkProxyCanvas proxyCanvas(&indirectCanvas); | |
| 632 testStep->setAssertMessageFormat(kProxyDrawAssertMessageFormat); | |
| 633 testStep->draw(&proxyCanvas, d, reporter); | |
| 634 // Verify that the SkProxyCanvas reports consitent state | |
| 635 testStep->setAssertMessageFormat(kProxyStateAssertMessageFormat); | |
| 636 AssertCanvasStatesEqual(reporter, d, &proxyCanvas, &referenceCanvas, testSte
p); | |
| 637 // Verify that the indirect canvas reports consitent state | |
| 638 testStep->setAssertMessageFormat(kProxyIndirectStateAssertMessageFormat); | |
| 639 AssertCanvasStatesEqual(reporter, d, &indirectCanvas, &referenceCanvas, test
Step); | |
| 640 } | |
| 641 | |
| 642 // unused | |
| 643 static void TestNWayCanvasStateConsistency( | 615 static void TestNWayCanvasStateConsistency( |
| 644 skiatest::Reporter* reporter, | 616 skiatest::Reporter* reporter, |
| 645 const TestData& d, | 617 const TestData& d, |
| 646 CanvasTestStep* testStep, | 618 CanvasTestStep* testStep, |
| 647 const SkCanvas& referenceCanvas) { | 619 const SkCanvas& referenceCanvas) { |
| 648 | 620 |
| 649 SkBitmap indirectStore1; | 621 SkBitmap indirectStore1; |
| 650 createBitmap(&indirectStore1, 0xFFFFFFFF); | 622 createBitmap(&indirectStore1, 0xFFFFFFFF); |
| 651 SkCanvas indirectCanvas1(indirectStore1); | 623 SkCanvas indirectCanvas1(indirectStore1); |
| 652 | 624 |
| 653 SkBitmap indirectStore2; | 625 SkBitmap indirectStore2; |
| 654 createBitmap(&indirectStore2, 0xFFFFFFFF); | 626 createBitmap(&indirectStore2, 0xFFFFFFFF); |
| 655 SkCanvas indirectCanvas2(indirectStore2); | 627 SkCanvas indirectCanvas2(indirectStore2); |
| 656 | 628 |
| 657 SkISize canvasSize = referenceCanvas.getDeviceSize(); | 629 SkISize canvasSize = referenceCanvas.getDeviceSize(); |
| 658 SkNWayCanvas nWayCanvas(canvasSize.width(), canvasSize.height()); | 630 SkNWayCanvas nWayCanvas(canvasSize.width(), canvasSize.height()); |
| 659 nWayCanvas.addCanvas(&indirectCanvas1); | 631 nWayCanvas.addCanvas(&indirectCanvas1); |
| 660 nWayCanvas.addCanvas(&indirectCanvas2); | 632 nWayCanvas.addCanvas(&indirectCanvas2); |
| 661 | 633 |
| 662 testStep->setAssertMessageFormat(kNWayDrawAssertMessageFormat); | 634 testStep->setAssertMessageFormat(kNWayDrawAssertMessageFormat); |
| 663 testStep->draw(&nWayCanvas, d, reporter); | 635 testStep->draw(&nWayCanvas, d, reporter); |
| 664 // Verify that the SkProxyCanvas reports consitent state | 636 // Verify that the SkNWayCanvas reports consitent state |
| 665 testStep->setAssertMessageFormat(kNWayStateAssertMessageFormat); | 637 testStep->setAssertMessageFormat(kNWayStateAssertMessageFormat); |
| 666 AssertCanvasStatesEqual(reporter, d, &nWayCanvas, &referenceCanvas, testStep
); | 638 AssertCanvasStatesEqual(reporter, d, &nWayCanvas, &referenceCanvas, testStep
); |
| 667 // Verify that the indirect canvases report consitent state | 639 // Verify that the indirect canvases report consitent state |
| 668 testStep->setAssertMessageFormat(kNWayIndirect1StateAssertMessageFormat); | 640 testStep->setAssertMessageFormat(kNWayIndirect1StateAssertMessageFormat); |
| 669 AssertCanvasStatesEqual(reporter, d, &indirectCanvas1, &referenceCanvas, tes
tStep); | 641 AssertCanvasStatesEqual(reporter, d, &indirectCanvas1, &referenceCanvas, tes
tStep); |
| 670 testStep->setAssertMessageFormat(kNWayIndirect2StateAssertMessageFormat); | 642 testStep->setAssertMessageFormat(kNWayIndirect2StateAssertMessageFormat); |
| 671 AssertCanvasStatesEqual(reporter, d, &indirectCanvas2, &referenceCanvas, tes
tStep); | 643 AssertCanvasStatesEqual(reporter, d, &indirectCanvas2, &referenceCanvas, tes
tStep); |
| 672 } | 644 } |
| 673 | 645 |
| 674 /* | 646 /* |
| 675 * This sub-test verifies that the test step passes when executed | 647 * This sub-test verifies that the test step passes when executed |
| 676 * with SkCanvas and with classes derrived from SkCanvas. It also verifies | 648 * with SkCanvas and with classes derrived from SkCanvas. It also verifies |
| 677 * that the all canvas derivatives report the same state as an SkCanvas | 649 * that the all canvas derivatives report the same state as an SkCanvas |
| 678 * after having executed the test step. | 650 * after having executed the test step. |
| 679 */ | 651 */ |
| 680 static void TestOverrideStateConsistency(skiatest::Reporter* reporter, const Tes
tData& d, | 652 static void TestOverrideStateConsistency(skiatest::Reporter* reporter, const Tes
tData& d, |
| 681 CanvasTestStep* testStep) { | 653 CanvasTestStep* testStep) { |
| 682 SkBitmap referenceStore; | 654 SkBitmap referenceStore; |
| 683 createBitmap(&referenceStore, 0xFFFFFFFF); | 655 createBitmap(&referenceStore, 0xFFFFFFFF); |
| 684 SkCanvas referenceCanvas(referenceStore); | 656 SkCanvas referenceCanvas(referenceStore); |
| 685 testStep->setAssertMessageFormat(kCanvasDrawAssertMessageFormat); | 657 testStep->setAssertMessageFormat(kCanvasDrawAssertMessageFormat); |
| 686 testStep->draw(&referenceCanvas, d, reporter); | 658 testStep->draw(&referenceCanvas, d, reporter); |
| 687 | 659 |
| 688 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, d, test
Step, referenceCanvas, false); | 660 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, d, test
Step, referenceCanvas, false); |
| 689 | 661 |
| 690 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, d, test
Step, referenceCanvas, true); | 662 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, d, test
Step, referenceCanvas, true); |
| 691 | 663 |
| 692 // The following test code is disabled because SkProxyCanvas is | |
| 693 // missing a lot of virtual overrides on get* methods, which are used | |
| 694 // to verify canvas state. | |
| 695 // Issue: http://code.google.com/p/skia/issues/detail?id=500 | |
| 696 | |
| 697 if (false) { // avoid bit rot, suppress warning | |
| 698 TestProxyCanvasStateConsistency(reporter, d, testStep, referenceCanvas); | |
| 699 } | |
| 700 | |
| 701 // The following test code is disabled because SkNWayCanvas does not | 664 // The following test code is disabled because SkNWayCanvas does not |
| 702 // report correct clipping and device bounds information | 665 // report correct clipping and device bounds information |
| 703 // Issue: http://code.google.com/p/skia/issues/detail?id=501 | 666 // Issue: http://code.google.com/p/skia/issues/detail?id=501 |
| 704 | 667 |
| 705 if (false) { // avoid bit rot, suppress warning | 668 if (false) { // avoid bit rot, suppress warning |
| 706 TestNWayCanvasStateConsistency(reporter, d, testStep, referenceCanvas); | 669 TestNWayCanvasStateConsistency(reporter, d, testStep, referenceCanvas); |
| 707 } | 670 } |
| 708 | 671 |
| 709 if (false) { // avoid bit rot, suppress warning | 672 if (false) { // avoid bit rot, suppress warning |
| 710 test_clipVisitor(reporter, &referenceCanvas); | 673 test_clipVisitor(reporter, &referenceCanvas); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 | 741 |
| 779 n = canvas.saveLayer(NULL, NULL); | 742 n = canvas.saveLayer(NULL, NULL); |
| 780 REPORTER_ASSERT(reporter, 2 == n); | 743 REPORTER_ASSERT(reporter, 2 == n); |
| 781 REPORTER_ASSERT(reporter, 3 == canvas.getSaveCount()); | 744 REPORTER_ASSERT(reporter, 3 == canvas.getSaveCount()); |
| 782 | 745 |
| 783 canvas.restore(); | 746 canvas.restore(); |
| 784 REPORTER_ASSERT(reporter, 2 == canvas.getSaveCount()); | 747 REPORTER_ASSERT(reporter, 2 == canvas.getSaveCount()); |
| 785 canvas.restore(); | 748 canvas.restore(); |
| 786 REPORTER_ASSERT(reporter, 1 == canvas.getSaveCount()); | 749 REPORTER_ASSERT(reporter, 1 == canvas.getSaveCount()); |
| 787 } | 750 } |
| OLD | NEW |