| 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 "RecordTestUtils.h" |    9 #include "RecordTestUtils.h" | 
|   10  |   10  | 
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  130 DEF_TEST(RecordDraw_BBH, r) { |  130 DEF_TEST(RecordDraw_BBH, r) { | 
|  131     SkRecord record; |  131     SkRecord record; | 
|  132     SkRecorder recorder(&record, W, H); |  132     SkRecorder recorder(&record, W, H); | 
|  133     recorder.save(); |  133     recorder.save(); | 
|  134         recorder.clipRect(SkRect::MakeWH(400, 500)); |  134         recorder.clipRect(SkRect::MakeWH(400, 500)); | 
|  135         recorder.scale(2, 2); |  135         recorder.scale(2, 2); | 
|  136         recorder.drawRect(SkRect::MakeWH(320, 240), SkPaint()); |  136         recorder.drawRect(SkRect::MakeWH(320, 240), SkPaint()); | 
|  137     recorder.restore(); |  137     recorder.restore(); | 
|  138  |  138  | 
|  139     TestBBH bbh; |  139     TestBBH bbh; | 
|  140     SkRecordFillBounds(record, &bbh); |  140     SkRecordFillBounds(SkRect::MakeWH(SkIntToScalar(W), SkIntToScalar(H)), recor
     d, &bbh); | 
|  141  |  141  | 
|  142     REPORTER_ASSERT(r, bbh.fEntries.count() == 5); |  142     REPORTER_ASSERT(r, bbh.fEntries.count() == 5); | 
|  143     for (int i = 0; i < bbh.fEntries.count(); i++) { |  143     for (int i = 0; i < bbh.fEntries.count(); i++) { | 
|  144         REPORTER_ASSERT(r, bbh.fEntries[i].opIndex == (unsigned)i); |  144         REPORTER_ASSERT(r, bbh.fEntries[i].opIndex == (unsigned)i); | 
|  145  |  145  | 
|  146         REPORTER_ASSERT(r, sloppy_rect_eq(SkRect::MakeWH(400, 480), bbh.fEntries
     [i].bounds)); |  146         REPORTER_ASSERT(r, sloppy_rect_eq(SkRect::MakeWH(400, 480), bbh.fEntries
     [i].bounds)); | 
|  147     } |  147     } | 
|  148 } |  148 } | 
|  149  |  149  | 
|  150 // A regression test for crbug.com/409110. |  150 // A regression test for crbug.com/409110. | 
|  151 DEF_TEST(RecordDraw_TextBounds, r) { |  151 DEF_TEST(RecordDraw_TextBounds, r) { | 
|  152     SkRecord record; |  152     SkRecord record; | 
|  153     SkRecorder recorder(&record, W, H); |  153     SkRecorder recorder(&record, W, H); | 
|  154  |  154  | 
|  155     // Two Chinese characters in UTF-8. |  155     // Two Chinese characters in UTF-8. | 
|  156     const char text[] = { '\xe6', '\xbc', '\xa2', '\xe5', '\xad', '\x97' }; |  156     const char text[] = { '\xe6', '\xbc', '\xa2', '\xe5', '\xad', '\x97' }; | 
|  157     const size_t bytes = SK_ARRAY_COUNT(text); |  157     const size_t bytes = SK_ARRAY_COUNT(text); | 
|  158  |  158  | 
|  159     const SkScalar xpos[] = { 10, 20 }; |  159     const SkScalar xpos[] = { 10, 20 }; | 
|  160     recorder.drawPosTextH(text, bytes, xpos, 30, SkPaint()); |  160     recorder.drawPosTextH(text, bytes, xpos, 30, SkPaint()); | 
|  161  |  161  | 
|  162     const SkPoint pos[] = { {40, 50}, {60, 70} }; |  162     const SkPoint pos[] = { {40, 50}, {60, 70} }; | 
|  163     recorder.drawPosText(text, bytes, pos, SkPaint()); |  163     recorder.drawPosText(text, bytes, pos, SkPaint()); | 
|  164  |  164  | 
|  165     TestBBH bbh; |  165     TestBBH bbh; | 
|  166     SkRecordFillBounds(record, &bbh); |  166     SkRecordFillBounds(SkRect::MakeWH(SkIntToScalar(W), SkIntToScalar(H)), recor
     d, &bbh); | 
|  167     REPORTER_ASSERT(r, bbh.fEntries.count() == 2); |  167     REPORTER_ASSERT(r, bbh.fEntries.count() == 2); | 
|  168  |  168  | 
|  169     // We can make these next assertions confidently because SkRecordFillBounds |  169     // We can make these next assertions confidently because SkRecordFillBounds | 
|  170     // builds its bounds by overestimating font metrics in a platform-independen
     t way. |  170     // builds its bounds by overestimating font metrics in a platform-independen
     t way. | 
|  171     // If that changes, these tests will need to be more flexible. |  171     // If that changes, these tests will need to be more flexible. | 
|  172     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(-
     110,  0, 140, 60))); |  172     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(0
     ,  0, 140, 60))); | 
|  173     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(-
     80, 20, 180, 100))); |  173     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(0
     , 20, 180, 100))); | 
|  174 } |  174 } | 
|  175  |  175  | 
|  176 // Base test to ensure start/stop range is respected |  176 // Base test to ensure start/stop range is respected | 
|  177 DEF_TEST(RecordDraw_PartialStartStop, r) { |  177 DEF_TEST(RecordDraw_PartialStartStop, r) { | 
|  178     static const int kWidth = 10, kHeight = 10; |  178     static const int kWidth = 10, kHeight = 10; | 
|  179  |  179  | 
|  180     SkRect r1 = { 0, 0, kWidth,   kHeight }; |  180     SkRect r1 = { 0, 0, kWidth,   kHeight }; | 
|  181     SkRect r2 = { 0, 0, kWidth,   kHeight/2 }; |  181     SkRect r2 = { 0, 0, kWidth,   kHeight/2 }; | 
|  182     SkRect r3 = { 0, 0, kWidth/2, kHeight }; |  182     SkRect r3 = { 0, 0, kWidth/2, kHeight }; | 
|  183     SkPaint p; |  183     SkPaint p; | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  244         recorder.clipRect(SkRect::MakeWH(20, 40)); |  244         recorder.clipRect(SkRect::MakeWH(20, 40)); | 
|  245         recorder.drawRect(SkRect::MakeWH(20, 40), SkPaint()); |  245         recorder.drawRect(SkRect::MakeWH(20, 40), SkPaint()); | 
|  246     recorder.restore(); |  246     recorder.restore(); | 
|  247  |  247  | 
|  248     // Under the original bug, the right edge value of the drawRect would be 20 
     less than asserted |  248     // Under the original bug, the right edge value of the drawRect would be 20 
     less than asserted | 
|  249     // here because we intersected it with a clip that had not been adjusted for
      the drop shadow. |  249     // here because we intersected it with a clip that had not been adjusted for
      the drop shadow. | 
|  250     // |  250     // | 
|  251     // The second bug showed up as adjusting the picture bounds (0,0,50,50) by t
     he drop shadow too. |  251     // The second bug showed up as adjusting the picture bounds (0,0,50,50) by t
     he drop shadow too. | 
|  252     // The saveLayer, clipRect, and restore bounds were incorrectly (0,0,70,50). |  252     // The saveLayer, clipRect, and restore bounds were incorrectly (0,0,70,50). | 
|  253     TestBBH bbh; |  253     TestBBH bbh; | 
|  254     SkRecordFillBounds(record, &bbh); |  254     SkRecordFillBounds(SkRect::MakeWH(50, 50), record, &bbh); | 
|  255     REPORTER_ASSERT(r, bbh.fEntries.count() == 4); |  255     REPORTER_ASSERT(r, bbh.fEntries.count() == 4); | 
|  256     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(0
     , 0, 50, 50))); |  256     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(0
     , 0, 50, 50))); | 
|  257     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(0
     , 0, 50, 50))); |  257     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(0
     , 0, 50, 50))); | 
|  258     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[2].bounds, SkRect::MakeLTRB(0
     , 0, 40, 40))); |  258     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[2].bounds, SkRect::MakeLTRB(0
     , 0, 40, 40))); | 
|  259     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[3].bounds, SkRect::MakeLTRB(0
     , 0, 50, 50))); |  259     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[3].bounds, SkRect::MakeLTRB(0
     , 0, 50, 50))); | 
|  260 } |  260 } | 
|  261  |  261  | 
 |  262 // When a saveLayer provides an explicit bound and has a complex paint (e.g., on
     e that | 
 |  263 // affects transparent black), that bound should serve to shrink the area of the
      required | 
 |  264 // backing store. | 
 |  265 DEF_TEST(RecordDraw_SaveLayerBoundsAffectsClipBounds, r) { | 
 |  266     SkRecord record; | 
 |  267     SkRecorder recorder(&record, 50, 50); | 
 |  268  | 
 |  269     SkPaint p; | 
 |  270     p.setXfermodeMode(SkXfermode::kSrc_Mode); | 
 |  271  | 
 |  272     SkRect bounds = SkRect::MakeLTRB(10, 10, 40, 40); | 
 |  273     recorder.saveLayer(&bounds, &p); | 
 |  274     recorder.drawRect(SkRect::MakeLTRB(20, 20, 30, 30), SkPaint()); | 
 |  275     recorder.restore(); | 
 |  276  | 
 |  277     TestBBH bbh; | 
 |  278     SkRecordFillBounds(SkRect::MakeWH(50, 50), record, &bbh); | 
 |  279     REPORTER_ASSERT(r, bbh.fEntries.count() == 3); | 
 |  280     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(1
     0, 10, 40, 40))); | 
 |  281     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(2
     0, 20, 30, 30))); | 
 |  282     REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[2].bounds, SkRect::MakeLTRB(1
     0, 10, 40, 40))); | 
 |  283 } | 
 |  284  | 
|  262 DEF_TEST(RecordDraw_drawImage, r){ |  285 DEF_TEST(RecordDraw_drawImage, r){ | 
|  263     class SkCanvasMock : public SkCanvas { |  286     class SkCanvasMock : public SkCanvas { | 
|  264     public: |  287     public: | 
|  265         SkCanvasMock(int width, int height) : INHERITED(width, height) { |  288         SkCanvasMock(int width, int height) : INHERITED(width, height) { | 
|  266             this->resetTestValues(); |  289             this->resetTestValues(); | 
|  267         } |  290         } | 
|  268         virtual ~SkCanvasMock() {} |  291         virtual ~SkCanvasMock() {} | 
|  269         virtual void drawImage(const SkImage* image, SkScalar left, SkScalar top
     , |  292         virtual void drawImage(const SkImage* image, SkScalar left, SkScalar top
     , | 
|  270                                const SkPaint* paint = NULL) SK_OVERRIDE { |  293                                const SkPaint* paint = NULL) SK_OVERRIDE { | 
|  271  |  294  | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  305  |  328  | 
|  306     { |  329     { | 
|  307         SkRecord record; |  330         SkRecord record; | 
|  308         SkRecorder recorder(&record, 10, 10); |  331         SkRecorder recorder(&record, 10, 10); | 
|  309         recorder.drawImageRect(image, 0, SkRect::MakeWH(10, 10)); |  332         recorder.drawImageRect(image, 0, SkRect::MakeWH(10, 10)); | 
|  310         SkRecordDraw(record, &canvas, 0, 0); |  333         SkRecordDraw(record, &canvas, 0, 0); | 
|  311     } |  334     } | 
|  312     REPORTER_ASSERT(r, canvas.fDrawImageRectCalled); |  335     REPORTER_ASSERT(r, canvas.fDrawImageRectCalled); | 
|  313  |  336  | 
|  314 } |  337 } | 
| OLD | NEW |