Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(442)

Side by Side Diff: tests/RecordDrawTest.cpp

Issue 617393004: BBHs: void* data -> unsigned data (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: The rest Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests/RTreeTest.cpp ('k') | tests/TileGridTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 setMatrix = assert_type<SkRecords::SetMatrix>(r, translateRecord, 0); 91 setMatrix = assert_type<SkRecords::SetMatrix>(r, translateRecord, 0);
92 REPORTER_ASSERT(r, setMatrix->matrix == translate); 92 REPORTER_ASSERT(r, setMatrix->matrix == translate);
93 93
94 setMatrix = assert_type<SkRecords::SetMatrix>(r, translateRecord, 2); 94 setMatrix = assert_type<SkRecords::SetMatrix>(r, translateRecord, 2);
95 SkMatrix expected = scale; 95 SkMatrix expected = scale;
96 expected.postConcat(translate); 96 expected.postConcat(translate);
97 REPORTER_ASSERT(r, setMatrix->matrix == expected); 97 REPORTER_ASSERT(r, setMatrix->matrix == expected);
98 } 98 }
99 99
100 struct TestBBH : public SkBBoxHierarchy { 100 struct TestBBH : public SkBBoxHierarchy {
101 virtual void insert(void* data, const SkRect& bounds, bool defer) SK_OVERRID E { 101 virtual void insert(unsigned opIndex, const SkRect& bounds, bool defer) SK_O VERRIDE {
102 Entry e = { (uintptr_t)data, bounds }; 102 Entry e = { opIndex, bounds };
103 entries.push(e); 103 fEntries.push(e);
104 } 104 }
105 virtual int getCount() const SK_OVERRIDE { return entries.count(); } 105 virtual int getCount() const SK_OVERRIDE { return fEntries.count(); }
106 106
107 virtual void flushDeferredInserts() SK_OVERRIDE {} 107 virtual void flushDeferredInserts() SK_OVERRIDE {}
108 108
109 virtual void search(const SkRect& query, SkTDArray<void*>* results) const SK _OVERRIDE {} 109 virtual void search(const SkRect& query, SkTDArray<unsigned>* results) const SK_OVERRIDE {}
110 virtual void clear() SK_OVERRIDE {} 110 virtual void clear() SK_OVERRIDE {}
111 virtual void rewindInserts() SK_OVERRIDE {}
112 virtual int getDepth() const SK_OVERRIDE { return -1; } 111 virtual int getDepth() const SK_OVERRIDE { return -1; }
113 112
114 struct Entry { 113 struct Entry {
115 uintptr_t data; 114 unsigned opIndex;
116 SkRect bounds; 115 SkRect bounds;
117 }; 116 };
118 SkTDArray<Entry> entries; 117 SkTDArray<Entry> fEntries;
119 }; 118 };
120 119
121 // Like a==b, with a little slop recognizing that float equality can be weird. 120 // Like a==b, with a little slop recognizing that float equality can be weird.
122 static bool sloppy_rect_eq(SkRect a, SkRect b) { 121 static bool sloppy_rect_eq(SkRect a, SkRect b) {
123 SkRect inset(a), outset(a); 122 SkRect inset(a), outset(a);
124 inset.inset(1, 1); 123 inset.inset(1, 1);
125 outset.outset(1, 1); 124 outset.outset(1, 1);
126 return outset.contains(b) && !inset.contains(b); 125 return outset.contains(b) && !inset.contains(b);
127 } 126 }
128 127
129 // This test is not meant to make total sense yet. It's testing the status quo 128 // This test is not meant to make total sense yet. It's testing the status quo
130 // of SkRecordFillBounds(), which itself doesn't make total sense yet. 129 // of SkRecordFillBounds(), which itself doesn't make total sense yet.
131 DEF_TEST(RecordDraw_BBH, r) { 130 DEF_TEST(RecordDraw_BBH, r) {
132 SkRecord record; 131 SkRecord record;
133 SkRecorder recorder(&record, W, H); 132 SkRecorder recorder(&record, W, H);
134 recorder.save(); 133 recorder.save();
135 recorder.clipRect(SkRect::MakeWH(400, 500)); 134 recorder.clipRect(SkRect::MakeWH(400, 500));
136 recorder.scale(2, 2); 135 recorder.scale(2, 2);
137 recorder.drawRect(SkRect::MakeWH(320, 240), SkPaint()); 136 recorder.drawRect(SkRect::MakeWH(320, 240), SkPaint());
138 recorder.restore(); 137 recorder.restore();
139 138
140 TestBBH bbh; 139 TestBBH bbh;
141 SkRecordFillBounds(record, &bbh); 140 SkRecordFillBounds(record, &bbh);
142 141
143 REPORTER_ASSERT(r, bbh.entries.count() == 5); 142 REPORTER_ASSERT(r, bbh.fEntries.count() == 5);
144 for (int i = 0; i < bbh.entries.count(); i++) { 143 for (int i = 0; i < bbh.fEntries.count(); i++) {
145 REPORTER_ASSERT(r, bbh.entries[i].data == (uintptr_t)i); 144 REPORTER_ASSERT(r, bbh.fEntries[i].opIndex == (unsigned)i);
146 145
147 REPORTER_ASSERT(r, sloppy_rect_eq(SkRect::MakeWH(400, 480), bbh.entries[ i].bounds)); 146 REPORTER_ASSERT(r, sloppy_rect_eq(SkRect::MakeWH(400, 480), bbh.fEntries [i].bounds));
148 } 147 }
149 } 148 }
150 149
151 // A regression test for crbug.com/409110. 150 // A regression test for crbug.com/409110.
152 DEF_TEST(RecordDraw_TextBounds, r) { 151 DEF_TEST(RecordDraw_TextBounds, r) {
153 SkRecord record; 152 SkRecord record;
154 SkRecorder recorder(&record, W, H); 153 SkRecorder recorder(&record, W, H);
155 154
156 // Two Chinese characters in UTF-8. 155 // Two Chinese characters in UTF-8.
157 const char text[] = { '\xe6', '\xbc', '\xa2', '\xe5', '\xad', '\x97' }; 156 const char text[] = { '\xe6', '\xbc', '\xa2', '\xe5', '\xad', '\x97' };
158 const size_t bytes = SK_ARRAY_COUNT(text); 157 const size_t bytes = SK_ARRAY_COUNT(text);
159 158
160 const SkScalar xpos[] = { 10, 20 }; 159 const SkScalar xpos[] = { 10, 20 };
161 recorder.drawPosTextH(text, bytes, xpos, 30, SkPaint()); 160 recorder.drawPosTextH(text, bytes, xpos, 30, SkPaint());
162 161
163 const SkPoint pos[] = { {40, 50}, {60, 70} }; 162 const SkPoint pos[] = { {40, 50}, {60, 70} };
164 recorder.drawPosText(text, bytes, pos, SkPaint()); 163 recorder.drawPosText(text, bytes, pos, SkPaint());
165 164
166 TestBBH bbh; 165 TestBBH bbh;
167 SkRecordFillBounds(record, &bbh); 166 SkRecordFillBounds(record, &bbh);
168 REPORTER_ASSERT(r, bbh.entries.count() == 2); 167 REPORTER_ASSERT(r, bbh.fEntries.count() == 2);
169 168
170 // We can make these next assertions confidently because SkRecordFillBounds 169 // We can make these next assertions confidently because SkRecordFillBounds
171 // 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.
172 // If that changes, these tests will need to be more flexible. 171 // If that changes, these tests will need to be more flexible.
173 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.entries[0].bounds, SkRect::MakeLTRB(-8 6, 6, 116, 54))); 172 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(- 86, 6, 116, 54)));
174 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.entries[1].bounds, SkRect::MakeLTRB(-5 6, 26, 156, 94))); 173 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(- 56, 26, 156, 94)));
175 } 174 }
176 175
177 // Base test to ensure start/stop range is respected 176 // Base test to ensure start/stop range is respected
178 DEF_TEST(RecordDraw_PartialStartStop, r) { 177 DEF_TEST(RecordDraw_PartialStartStop, r) {
179 static const int kWidth = 10, kHeight = 10; 178 static const int kWidth = 10, kHeight = 10;
180 179
181 SkRect r1 = { 0, 0, kWidth, kHeight }; 180 SkRect r1 = { 0, 0, kWidth, kHeight };
182 SkRect r2 = { 0, 0, kWidth, kHeight/2 }; 181 SkRect r2 = { 0, 0, kWidth, kHeight/2 };
183 SkRect r3 = { 0, 0, kWidth/2, kHeight }; 182 SkRect r3 = { 0, 0, kWidth/2, kHeight };
184 SkPaint p; 183 SkPaint p;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 recorder.drawRect(SkRect::MakeWH(20, 40), SkPaint()); 244 recorder.drawRect(SkRect::MakeWH(20, 40), SkPaint());
246 recorder.restore(); 245 recorder.restore();
247 246
248 // Under the original bug, the right edge value of the drawRect would be 20 less than asserted 247 // 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. 248 // here because we intersected it with a clip that had not been adjusted for the drop shadow.
250 // 249 //
251 // The second bug showed up as adjusting the picture bounds (0,0,50,50) by t he drop shadow too. 250 // 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). 251 // The saveLayer, clipRect, and restore bounds were incorrectly (0,0,70,50).
253 TestBBH bbh; 252 TestBBH bbh;
254 SkRecordFillBounds(record, &bbh); 253 SkRecordFillBounds(record, &bbh);
255 REPORTER_ASSERT(r, bbh.entries.count() == 4); 254 REPORTER_ASSERT(r, bbh.fEntries.count() == 4);
256 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.entries[0].bounds, SkRect::MakeLTRB(0, 0, 50, 50))); 255 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[0].bounds, SkRect::MakeLTRB(0 , 0, 50, 50)));
257 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.entries[1].bounds, SkRect::MakeLTRB(0, 0, 50, 50))); 256 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[1].bounds, SkRect::MakeLTRB(0 , 0, 50, 50)));
258 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.entries[2].bounds, SkRect::MakeLTRB(0, 0, 40, 40))); 257 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[2].bounds, SkRect::MakeLTRB(0 , 0, 40, 40)));
259 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.entries[3].bounds, SkRect::MakeLTRB(0, 0, 50, 50))); 258 REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[3].bounds, SkRect::MakeLTRB(0 , 0, 50, 50)));
260 } 259 }
OLDNEW
« no previous file with comments | « tests/RTreeTest.cpp ('k') | tests/TileGridTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698