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 #include "Test.h" | 8 #include "Test.h" |
| 9 #include "TestClassDef.h" |
9 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
10 #include "SkCanvas.h" | 11 #include "SkCanvas.h" |
11 #include "SkTileGrid.h" | 12 #include "SkTileGrid.h" |
12 #include "SkTileGridPicture.h" | 13 #include "SkTileGridPicture.h" |
13 | 14 |
14 enum Tile { | 15 enum Tile { |
15 kTopLeft_Tile = 0x1, | 16 kTopLeft_Tile = 0x1, |
16 kTopRight_Tile = 0x2, | 17 kTopRight_Tile = 0x2, |
17 kBottomLeft_Tile = 0x4, | 18 kBottomLeft_Tile = 0x4, |
18 kBottomRight_Tile = 0x8, | 19 kBottomRight_Tile = 0x8, |
19 | 20 |
20 kAll_Tile = kTopLeft_Tile | kTopRight_Tile | kBottomLeft_Tile | kBottomRight
_Tile, | 21 kAll_Tile = kTopLeft_Tile | kTopRight_Tile | kBottomLeft_Tile | kBottomRight
_Tile, |
21 }; | 22 }; |
22 | 23 |
23 class MockCanvas : public SkCanvas { | 24 class MockCanvas : public SkCanvas { |
24 public: | 25 public: |
25 MockCanvas(SkBaseDevice* device) : SkCanvas(device) | 26 MockCanvas(SkBaseDevice* device) : SkCanvas(device) |
26 {} | 27 {} |
27 | 28 |
28 virtual void drawRect(const SkRect& rect, const SkPaint&) | 29 virtual void drawRect(const SkRect& rect, const SkPaint&) |
29 { | 30 { |
30 // This capture occurs before quick reject. | 31 // This capture occurs before quick reject. |
31 fRects.push(rect); | 32 fRects.push(rect); |
32 } | 33 } |
33 | 34 |
34 SkTDArray<SkRect> fRects; | 35 SkTDArray<SkRect> fRects; |
35 }; | 36 }; |
36 | 37 |
37 class TileGridTest { | 38 static void verifyTileHits(skiatest::Reporter* reporter, SkIRect rect, |
38 public: | 39 uint32_t tileMask, int borderPixels = 0) { |
39 static void verifyTileHits(skiatest::Reporter* reporter, SkIRect rect, uint3
2_t tileMask, | 40 SkTileGridPicture::TileGridInfo info; |
40 int borderPixels = 0) { | 41 info.fMargin.set(borderPixels, borderPixels); |
41 SkTileGridPicture::TileGridInfo info; | 42 info.fOffset.setZero(); |
42 info.fMargin.set(borderPixels, borderPixels); | 43 info.fTileInterval.set(10 - 2 * borderPixels, 10 - 2 * borderPixels); |
43 info.fOffset.setZero(); | 44 SkTileGrid grid(2, 2, info, NULL); |
44 info.fTileInterval.set(10 - 2 * borderPixels, 10 - 2 * borderPixels); | 45 grid.insert(NULL, rect, false); |
45 SkTileGrid grid(2, 2, info, NULL); | 46 REPORTER_ASSERT(reporter, grid.tileCount(0, 0) == |
46 grid.insert(NULL, rect, false); | 47 ((tileMask & kTopLeft_Tile)? 1 : 0)); |
47 REPORTER_ASSERT(reporter, grid.tile(0,0).count() == | 48 REPORTER_ASSERT(reporter, grid.tileCount(1, 0) == |
48 ((tileMask & kTopLeft_Tile)? 1 : 0)); | 49 ((tileMask & kTopRight_Tile)? 1 : 0)); |
49 REPORTER_ASSERT(reporter, grid.tile(1,0).count() == | 50 REPORTER_ASSERT(reporter, grid.tileCount(0, 1) == |
50 ((tileMask & kTopRight_Tile)? 1 : 0)); | 51 ((tileMask & kBottomLeft_Tile)? 1 : 0)); |
51 REPORTER_ASSERT(reporter, grid.tile(0,1).count() == | 52 REPORTER_ASSERT(reporter, grid.tileCount(1, 1) == |
52 ((tileMask & kBottomLeft_Tile)? 1 : 0)); | 53 ((tileMask & kBottomRight_Tile)? 1 : 0)); |
53 REPORTER_ASSERT(reporter, grid.tile(1,1).count() == | 54 } |
54 ((tileMask & kBottomRight_Tile)? 1 : 0)); | 55 |
55 } | 56 DEF_TEST(TileGrid_UnalignedQuery, reporter) { |
56 | 57 // Use SkTileGridPicture to generate a SkTileGrid with a helper |
57 static void TestUnalignedQuery(skiatest::Reporter* reporter) { | 58 SkTileGridPicture::TileGridInfo info; |
58 // Use SkTileGridPicture to generate a SkTileGrid with a helper | 59 info.fMargin.setEmpty(); |
59 SkTileGridPicture::TileGridInfo info; | 60 info.fOffset.setZero(); |
60 info.fMargin.setEmpty(); | 61 info.fTileInterval.set(10, 10); |
61 info.fOffset.setZero(); | 62 SkTileGridPicture picture(20, 20, info); |
62 info.fTileInterval.set(10, 10); | 63 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0), |
63 SkTileGridPicture picture(20, 20, info); | 64 SkIntToScalar(8), SkIntToScalar(8)); |
64 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0), | 65 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(11), SkIntToScalar(11), |
65 SkIntToScalar(8), SkIntToScalar(8)); | 66 SkIntToScalar(1), SkIntToScalar(1)); |
66 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(11), SkIntToScalar(11), | 67 SkCanvas* canvas = picture.beginRecording(20, 20, SkPicture::kOptimizeForCli
ppedPlayback_RecordingFlag); |
67 SkIntToScalar(1), SkIntToScalar(1)); | 68 SkPaint paint; |
68 SkCanvas* canvas = picture.beginRecording(20, 20, SkPicture::kOptimizeFo
rClippedPlayback_RecordingFlag); | 69 canvas->drawRect(rect1, paint); |
69 SkPaint paint; | 70 canvas->drawRect(rect2, paint); |
70 canvas->drawRect(rect1, paint); | 71 picture.endRecording(); |
71 canvas->drawRect(rect2, paint); | 72 |
72 picture.endRecording(); | 73 SkBitmap store; |
73 | 74 store.setConfig(SkBitmap::kARGB_8888_Config, 1, 1); |
74 SkBitmap store; | 75 store.allocPixels(); |
75 store.setConfig(SkBitmap::kARGB_8888_Config, 1, 1); | 76 |
76 store.allocPixels(); | 77 // Test parts of top-left tile |
77 | 78 { |
78 // Test parts of top-left tile | 79 SkBitmapDevice device(store); |
79 { | 80 MockCanvas mockCanvas(&device); |
80 SkBitmapDevice device(store); | 81 picture.draw(&mockCanvas); |
81 MockCanvas mockCanvas(&device); | 82 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
82 picture.draw(&mockCanvas); | 83 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
83 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 84 } |
84 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 85 { |
85 } | 86 SkBitmapDevice device(store); |
86 { | 87 MockCanvas mockCanvas(&device); |
87 SkBitmapDevice device(store); | 88 mockCanvas.translate(-7.99f, -7.99f); |
88 MockCanvas mockCanvas(&device); | 89 picture.draw(&mockCanvas); |
89 mockCanvas.translate(-7.99f, -7.99f); | 90 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
90 picture.draw(&mockCanvas); | 91 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
91 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 92 } |
92 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 93 // Corner overlap |
93 } | 94 { |
94 // Corner overlap | 95 SkBitmapDevice device(store); |
95 { | 96 MockCanvas mockCanvas(&device); |
96 SkBitmapDevice device(store); | 97 mockCanvas.translate(-9.5f, -9.5f); |
97 MockCanvas mockCanvas(&device); | 98 picture.draw(&mockCanvas); |
98 mockCanvas.translate(-9.5f, -9.5f); | 99 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); |
99 picture.draw(&mockCanvas); | 100 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
100 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); | 101 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[1]); |
101 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 102 } |
102 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[1]); | 103 // Intersect bottom right tile, but does not overlap rect 2 |
103 } | 104 { |
104 // Intersect bottom right tile, but does not overlap rect 2 | 105 SkBitmapDevice device(store); |
105 { | 106 MockCanvas mockCanvas(&device); |
106 SkBitmapDevice device(store); | 107 mockCanvas.translate(-16.0f, -16.0f); |
107 MockCanvas mockCanvas(&device); | 108 picture.draw(&mockCanvas); |
108 mockCanvas.translate(-16.0f, -16.0f); | 109 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
109 picture.draw(&mockCanvas); | 110 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); |
110 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 111 } |
111 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); | 112 // Out of bounds queries, snap to border tiles |
112 } | 113 { |
113 // Out of bounds queries, snap to border tiles | 114 SkBitmapDevice device(store); |
114 { | 115 MockCanvas mockCanvas(&device); |
115 SkBitmapDevice device(store); | 116 mockCanvas.translate(2.0f, 0.0f); |
116 MockCanvas mockCanvas(&device); | 117 picture.draw(&mockCanvas); |
117 mockCanvas.translate(2.0f, 0.0f); | 118 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
118 picture.draw(&mockCanvas); | 119 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
119 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 120 } |
120 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 121 { |
121 } | 122 SkBitmapDevice device(store); |
122 { | 123 MockCanvas mockCanvas(&device); |
123 SkBitmapDevice device(store); | 124 mockCanvas.translate(0.0f, 2.0f); |
124 MockCanvas mockCanvas(&device); | 125 picture.draw(&mockCanvas); |
125 mockCanvas.translate(0.0f, 2.0f); | 126 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
126 picture.draw(&mockCanvas); | 127 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
127 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 128 } |
128 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 129 { |
129 } | 130 SkBitmapDevice device(store); |
130 { | 131 MockCanvas mockCanvas(&device); |
131 SkBitmapDevice device(store); | 132 mockCanvas.translate(-22.0f, -16.0f); |
132 MockCanvas mockCanvas(&device); | 133 picture.draw(&mockCanvas); |
133 mockCanvas.translate(-22.0f, -16.0f); | 134 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
134 picture.draw(&mockCanvas); | 135 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); |
135 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 136 } |
136 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); | 137 { |
137 } | 138 SkBitmapDevice device(store); |
138 { | 139 MockCanvas mockCanvas(&device); |
139 SkBitmapDevice device(store); | 140 mockCanvas.translate(-16.0f, -22.0f); |
140 MockCanvas mockCanvas(&device); | 141 picture.draw(&mockCanvas); |
141 mockCanvas.translate(-16.0f, -22.0f); | 142 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
142 picture.draw(&mockCanvas); | 143 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); |
143 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 144 } |
144 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); | 145 } |
145 } | 146 |
146 } | 147 DEF_TEST(TileGrid_OverlapOffsetQueryAlignment, reporter) { |
147 | 148 // Use SkTileGridPicture to generate a SkTileGrid with a helper |
148 static void TestOverlapOffsetQueryAlignment(skiatest::Reporter* reporter) { | 149 SkTileGridPicture::TileGridInfo info; |
149 // Use SkTileGridPicture to generate a SkTileGrid with a helper | 150 info.fMargin.set(1, 1); |
150 SkTileGridPicture::TileGridInfo info; | 151 info.fOffset.set(-1, -1); |
151 info.fMargin.set(1, 1); | 152 info.fTileInterval.set(8, 8); |
152 info.fOffset.set(-1, -1); | 153 SkTileGridPicture picture(20, 20, info); |
153 info.fTileInterval.set(8, 8); | 154 |
154 SkTileGridPicture picture(20, 20, info); | 155 // rect landing entirely in top left tile |
155 | 156 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0), |
156 // rect landing entirely in top left tile | 157 SkIntToScalar(1), SkIntToScalar(1)); |
157 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0), | 158 // rect landing entirely in center tile |
158 SkIntToScalar(1), SkIntToScalar(1)); | 159 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(12), SkIntToScalar(12), |
159 // rect landing entirely in center tile | 160 SkIntToScalar(1), SkIntToScalar(1)); |
160 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(12), SkIntToScalar(12), | 161 // rect landing entirely in bottomright tile |
161 SkIntToScalar(1), SkIntToScalar(1)); | 162 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(19), SkIntToScalar(19), |
162 // rect landing entirely in bottomright tile | 163 SkIntToScalar(1), SkIntToScalar(1)); |
163 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(19), SkIntToScalar(19), | 164 SkCanvas* canvas = picture.beginRecording(20, 20, SkPicture::kOptimizeForCli
ppedPlayback_RecordingFlag); |
164 SkIntToScalar(1), SkIntToScalar(1)); | 165 SkPaint paint; |
165 SkCanvas* canvas = picture.beginRecording(20, 20, SkPicture::kOptimizeFo
rClippedPlayback_RecordingFlag); | 166 canvas->drawRect(rect1, paint); |
166 SkPaint paint; | 167 canvas->drawRect(rect2, paint); |
167 canvas->drawRect(rect1, paint); | 168 canvas->drawRect(rect3, paint); |
168 canvas->drawRect(rect2, paint); | 169 picture.endRecording(); |
169 canvas->drawRect(rect3, paint); | 170 |
170 picture.endRecording(); | 171 SkBitmap tileBitmap; |
171 | 172 tileBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); |
172 SkBitmap tileBitmap; | 173 tileBitmap.allocPixels(); |
173 tileBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); | 174 SkBitmap moreThanATileBitmap; |
174 tileBitmap.allocPixels(); | 175 moreThanATileBitmap.setConfig(SkBitmap::kARGB_8888_Config, 11, 11); |
175 SkBitmap moreThanATileBitmap; | 176 moreThanATileBitmap.allocPixels(); |
176 moreThanATileBitmap.setConfig(SkBitmap::kARGB_8888_Config, 11, 11); | 177 SkBitmap tinyBitmap; |
177 moreThanATileBitmap.allocPixels(); | 178 tinyBitmap.setConfig(SkBitmap::kARGB_8888_Config, 2, 2); |
178 SkBitmap tinyBitmap; | 179 tinyBitmap.allocPixels(); |
179 tinyBitmap.setConfig(SkBitmap::kARGB_8888_Config, 2, 2); | 180 // Test parts of top-left tile |
180 tinyBitmap.allocPixels(); | 181 { |
181 // Test parts of top-left tile | 182 // The offset should cancel the top and left borders of the top left til
e |
182 { | 183 // So a look-up at interval 0-10 should be grid aligned, |
183 // The offset should cancel the top and left borders of the top left
tile | 184 SkBitmapDevice device(tileBitmap); |
184 // So a look-up at interval 0-10 should be grid aligned, | 185 MockCanvas mockCanvas(&device); |
185 SkBitmapDevice device(tileBitmap); | 186 picture.draw(&mockCanvas); |
186 MockCanvas mockCanvas(&device); | 187 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
187 picture.draw(&mockCanvas); | 188 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
188 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 189 } |
189 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 190 { |
190 } | 191 // Encroaching border by one pixel |
191 { | 192 SkBitmapDevice device(moreThanATileBitmap); |
192 // Encroaching border by one pixel | 193 MockCanvas mockCanvas(&device); |
193 SkBitmapDevice device(moreThanATileBitmap); | 194 picture.draw(&mockCanvas); |
194 MockCanvas mockCanvas(&device); | 195 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); |
195 picture.draw(&mockCanvas); | 196 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
196 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); | 197 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[1]); |
197 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 198 } |
198 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[1]); | 199 { |
199 } | 200 // Tile stride is 8 (tileWidth - 2 * border pixels |
200 { | 201 // so translating by 8, should make query grid-aligned |
201 // Tile stride is 8 (tileWidth - 2 * border pixels | 202 // with middle tile. |
202 // so translating by 8, should make query grid-aligned | 203 SkBitmapDevice device(tileBitmap); |
203 // with middle tile. | 204 MockCanvas mockCanvas(&device); |
204 SkBitmapDevice device(tileBitmap); | 205 mockCanvas.translate(SkIntToScalar(-8), SkIntToScalar(-8)); |
205 MockCanvas mockCanvas(&device); | 206 picture.draw(&mockCanvas); |
206 mockCanvas.translate(SkIntToScalar(-8), SkIntToScalar(-8)); | 207 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); |
207 picture.draw(&mockCanvas); | 208 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); |
208 REPORTER_ASSERT(reporter, 1 == mockCanvas.fRects.count()); | 209 } |
209 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); | 210 { |
210 } | 211 SkBitmapDevice device(tileBitmap); |
211 { | 212 MockCanvas mockCanvas(&device); |
212 SkBitmapDevice device(tileBitmap); | 213 mockCanvas.translate(-7.9f, -7.9f); |
213 MockCanvas mockCanvas(&device); | 214 picture.draw(&mockCanvas); |
214 mockCanvas.translate(-7.9f, -7.9f); | 215 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); |
215 picture.draw(&mockCanvas); | 216 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); |
216 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); | 217 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[1]); |
217 REPORTER_ASSERT(reporter, rect1 == mockCanvas.fRects[0]); | 218 } |
218 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[1]); | 219 { |
219 } | 220 SkBitmapDevice device(tileBitmap); |
220 { | 221 MockCanvas mockCanvas(&device); |
221 SkBitmapDevice device(tileBitmap); | 222 mockCanvas.translate(-8.1f, -8.1f); |
222 MockCanvas mockCanvas(&device); | 223 picture.draw(&mockCanvas); |
223 mockCanvas.translate(-8.1f, -8.1f); | 224 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); |
224 picture.draw(&mockCanvas); | 225 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); |
225 REPORTER_ASSERT(reporter, 2 == mockCanvas.fRects.count()); | 226 REPORTER_ASSERT(reporter, rect3 == mockCanvas.fRects[1]); |
226 REPORTER_ASSERT(reporter, rect2 == mockCanvas.fRects[0]); | 227 } |
227 REPORTER_ASSERT(reporter, rect3 == mockCanvas.fRects[1]); | 228 { |
228 } | 229 // Regression test for crbug.com/234688 |
229 { | 230 // Once the 2x2 device region is inset by margin, it yields an empty |
230 // Regression test for crbug.com/234688 | 231 // adjusted region, sitting right on top of the tile boundary. |
231 // Once the 2x2 device region is inset by margin, it yields an empty | 232 SkBitmapDevice device(tinyBitmap); |
232 // adjusted region, sitting right on top of the tile boundary. | 233 MockCanvas mockCanvas(&device); |
233 SkBitmapDevice device(tinyBitmap); | 234 mockCanvas.translate(-8.0f, -8.0f); |
234 MockCanvas mockCanvas(&device); | 235 picture.draw(&mockCanvas); |
235 mockCanvas.translate(-8.0f, -8.0f); | 236 // This test passes by not asserting. We do not validate the rects recor
ded |
236 picture.draw(&mockCanvas); | 237 // because the result is numerically unstable (floating point equality). |
237 // This test passes by not asserting. We do not validate the rects r
ecorded | 238 // The content of any one of the four tiles of the tilegrid would be a v
alid |
238 // because the result is numerically unstable (floating point equali
ty). | 239 // result since any bbox that covers the center point of the canvas will
be |
239 // The content of any one of the four tiles of the tilegrid would be
a valid | 240 // recorded in all four tiles. |
240 // result since any bbox that covers the center point of the canvas
will be | 241 } |
241 // recorded in all four tiles. | 242 } |
242 } | 243 |
243 } | 244 DEF_TEST(TileGrid, reporter) { |
244 | 245 // Out of bounds |
245 static void Test(skiatest::Reporter* reporter) { | 246 verifyTileHits(reporter, SkIRect::MakeXYWH(30, 0, 1, 1), 0); |
246 // Out of bounds | 247 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 30, 1, 1), 0); |
247 verifyTileHits(reporter, SkIRect::MakeXYWH(30, 0, 1, 1), 0); | 248 verifyTileHits(reporter, SkIRect::MakeXYWH(-10, 0, 1, 1), 0); |
248 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 30, 1, 1), 0); | 249 verifyTileHits(reporter, SkIRect::MakeXYWH(0, -10, 1, 1), 0); |
249 verifyTileHits(reporter, SkIRect::MakeXYWH(-10, 0, 1, 1), 0); | 250 |
250 verifyTileHits(reporter, SkIRect::MakeXYWH(0, -10, 1, 1), 0); | 251 // Dilation for AA consideration |
251 | 252 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 9, 9), kTopLeft_Tile); |
252 // Dilation for AA consideration | 253 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 10, 10), kAll_Tile); |
253 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 9, 9), kTopLeft_Tile); | 254 verifyTileHits(reporter, SkIRect::MakeXYWH(9, 9, 1, 1), kAll_Tile); |
254 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 10, 10), kAll_Tile); | 255 verifyTileHits(reporter, SkIRect::MakeXYWH(10, 10, 1, 1), kAll_Tile); |
255 verifyTileHits(reporter, SkIRect::MakeXYWH(9, 9, 1, 1), kAll_Tile); | 256 verifyTileHits(reporter, SkIRect::MakeXYWH(11, 11, 1, 1), kBottomRight_Tile
); |
256 verifyTileHits(reporter, SkIRect::MakeXYWH(10, 10, 1, 1), kAll_Tile); | 257 |
257 verifyTileHits(reporter, SkIRect::MakeXYWH(11, 11, 1, 1), kBottomRight_
Tile); | 258 // BorderPixels |
258 | 259 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 6, 6), kTopLeft_Tile, 1); |
259 // BorderPixels | 260 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 7, 7), kAll_Tile, 1); |
260 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 6, 6), kTopLeft_Tile,
1); | 261 verifyTileHits(reporter, SkIRect::MakeXYWH(9, 9, 1, 1), kAll_Tile, 1); |
261 verifyTileHits(reporter, SkIRect::MakeXYWH(0, 0, 7, 7), kAll_Tile, 1); | 262 verifyTileHits(reporter, SkIRect::MakeXYWH(10, 10, 1, 1), kBottomRight_Tile
, 1); |
262 verifyTileHits(reporter, SkIRect::MakeXYWH(9, 9, 1, 1), kAll_Tile, 1); | 263 verifyTileHits(reporter, SkIRect::MakeXYWH(17, 17, 1, 1), kBottomRight_Tile
, 1); |
263 verifyTileHits(reporter, SkIRect::MakeXYWH(10, 10, 1, 1), kBottomRight_
Tile, 1); | 264 |
264 verifyTileHits(reporter, SkIRect::MakeXYWH(17, 17, 1, 1), kBottomRight_
Tile, 1); | 265 // BBoxes that overlap tiles |
265 | 266 verifyTileHits(reporter, SkIRect::MakeXYWH(5, 5, 10, 1), kTopLeft_Tile | kT
opRight_Tile); |
266 // BBoxes that overlap tiles | 267 verifyTileHits(reporter, SkIRect::MakeXYWH(5, 5, 1, 10), kTopLeft_Tile | |
267 verifyTileHits(reporter, SkIRect::MakeXYWH(5, 5, 10, 1), kTopLeft_Tile
| kTopRight_Tile); | 268 kBottomLeft_Tile); |
268 verifyTileHits(reporter, SkIRect::MakeXYWH(5, 5, 1, 10), kTopLeft_Tile
| | 269 verifyTileHits(reporter, SkIRect::MakeXYWH(5, 5, 10, 10), kAll_Tile); |
269 kBottomLeft_Tile); | 270 verifyTileHits(reporter, SkIRect::MakeXYWH(-10, -10, 40, 40), kAll_Tile); |
270 verifyTileHits(reporter, SkIRect::MakeXYWH(5, 5, 10, 10), kAll_Tile); | 271 } |
271 verifyTileHits(reporter, SkIRect::MakeXYWH(-10, -10, 40, 40), kAll_Tile
); | |
272 | |
273 TestUnalignedQuery(reporter); | |
274 TestOverlapOffsetQueryAlignment(reporter); | |
275 } | |
276 }; | |
277 | |
278 #include "TestClassDef.h" | |
279 DEFINE_TESTCLASS("TileGrid", TileGridTestClass, TileGridTest::Test) | |
OLD | NEW |