| 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 |