OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/output/gl_renderer.h" | |
6 | |
7 #include "base/message_loop.h" | 5 #include "base/message_loop.h" |
8 #include "cc/layers/append_quads_data.h" | 6 #include "cc/layers/append_quads_data.h" |
7 #include "cc/output/gl_renderer.h" | |
9 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
10 #include "cc/resources/sync_point_helper.h" | 9 #include "cc/resources/sync_point_helper.h" |
11 #include "cc/test/pixel_test.h" | 10 #include "cc/test/pixel_test.h" |
12 #include "gpu/GLES2/gl2extchromium.h" | 11 #include "gpu/GLES2/gl2extchromium.h" |
13 #include "third_party/skia/include/core/SkImageFilter.h" | 12 #include "third_party/skia/include/core/SkImageFilter.h" |
14 #include "third_party/skia/include/core/SkMatrix.h" | 13 #include "third_party/skia/include/core/SkMatrix.h" |
15 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" | 14 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" |
16 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" | 15 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" |
17 | 16 |
18 namespace cc { | 17 namespace cc { |
19 namespace { | 18 namespace { |
20 | 19 |
21 class GLRendererPixelTest : public PixelTest {}; | |
22 | |
23 scoped_ptr<RenderPass> CreateTestRootRenderPass(RenderPass::Id id, | 20 scoped_ptr<RenderPass> CreateTestRootRenderPass(RenderPass::Id id, |
24 gfx::Rect rect) { | 21 gfx::Rect rect) { |
25 scoped_ptr<RenderPass> pass = RenderPass::Create(); | 22 scoped_ptr<RenderPass> pass = RenderPass::Create(); |
26 const gfx::Rect output_rect = rect; | 23 const gfx::Rect output_rect = rect; |
27 const gfx::RectF damage_rect = rect; | 24 const gfx::RectF damage_rect = rect; |
28 const gfx::Transform transform_to_root_target; | 25 const gfx::Transform transform_to_root_target; |
29 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); | 26 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); |
30 return pass.Pass(); | 27 return pass.Pass(); |
31 } | 28 } |
32 | 29 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
68 0, // mask_resource_id | 65 0, // mask_resource_id |
69 rect, // contents_changed_since_last_frame | 66 rect, // contents_changed_since_last_frame |
70 gfx::RectF(), // mask_uv_rect | 67 gfx::RectF(), // mask_uv_rect |
71 WebKit::WebFilterOperations(), // foreground filters | 68 WebKit::WebFilterOperations(), // foreground filters |
72 skia::RefPtr<SkImageFilter>(), // foreground filter | 69 skia::RefPtr<SkImageFilter>(), // foreground filter |
73 WebKit::WebFilterOperations()); // background filters | 70 WebKit::WebFilterOperations()); // background filters |
74 | 71 |
75 return quad.PassAs<DrawQuad>(); | 72 return quad.PassAs<DrawQuad>(); |
76 } | 73 } |
77 | 74 |
75 typedef ::testing::Types<GLRenderer, SoftwareRenderer> RendererTypes; | |
76 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | |
77 | |
78 // All pixels can be off by one, but any more than that is an error. | |
79 class FuzzyPixelOffByOneComparator : public FuzzyPixelComparator { | |
80 public: | |
81 explicit FuzzyPixelOffByOneComparator(bool discard_alpha) | |
82 : FuzzyPixelComparator(discard_alpha, 100.f, 0.f, 1.f, 1, 0) {} | |
83 }; | |
78 | 84 |
79 #if !defined(OS_ANDROID) | 85 #if !defined(OS_ANDROID) |
80 TEST_F(GLRendererPixelTest, SimpleGreenRect) { | 86 TYPED_TEST(RendererPixelTest, SimpleGreenRect) { |
81 gfx::Rect rect(device_viewport_size_); | 87 gfx::Rect rect(this->device_viewport_size_); |
enne (OOO)
2013/04/28 02:56:55
The "this->" requirement is an unfortunate require
| |
82 | 88 |
83 RenderPass::Id id(1, 1); | 89 RenderPass::Id id(1, 1); |
84 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 90 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
85 | 91 |
86 gfx::Transform content_to_target_transform; | 92 gfx::Transform content_to_target_transform; |
87 scoped_ptr<SharedQuadState> shared_state = | 93 scoped_ptr<SharedQuadState> shared_state = |
88 CreateTestSharedQuadState(content_to_target_transform, rect); | 94 CreateTestSharedQuadState(content_to_target_transform, rect); |
89 | 95 |
90 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); | 96 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); |
91 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); | 97 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); |
92 | 98 |
93 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); | 99 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); |
94 | 100 |
95 RenderPassList pass_list; | 101 RenderPassList pass_list; |
96 pass_list.push_back(pass.Pass()); | 102 pass_list.push_back(pass.Pass()); |
97 | 103 |
98 EXPECT_TRUE(RunPixelTest( | 104 EXPECT_TRUE(this->RunPixelTest( |
99 &pass_list, | 105 &pass_list, |
100 base::FilePath(FILE_PATH_LITERAL("green.png")), | 106 base::FilePath(FILE_PATH_LITERAL("green.png")), |
101 ExactPixelComparator(true))); | 107 ExactPixelComparator(true))); |
102 } | 108 } |
103 | 109 |
104 TEST_F(GLRendererPixelTest, FastPassColorFilterAlpha) { | 110 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) { |
105 gfx::Rect viewport_rect(device_viewport_size_); | 111 gfx::Rect viewport_rect(this->device_viewport_size_); |
106 | 112 |
107 RenderPass::Id root_pass_id(1, 1); | 113 RenderPass::Id root_pass_id(1, 1); |
108 scoped_ptr<RenderPass> root_pass = | 114 scoped_ptr<RenderPass> root_pass = |
109 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 115 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
110 | 116 |
111 RenderPass::Id child_pass_id(2, 2); | 117 RenderPass::Id child_pass_id(2, 2); |
112 gfx::Rect pass_rect(device_viewport_size_); | 118 gfx::Rect pass_rect(this->device_viewport_size_); |
113 gfx::Transform transform_to_root; | 119 gfx::Transform transform_to_root; |
114 scoped_ptr<RenderPass> child_pass = | 120 scoped_ptr<RenderPass> child_pass = |
115 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 121 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
116 | 122 |
117 gfx::Transform content_to_target_transform; | 123 gfx::Transform content_to_target_transform; |
118 scoped_ptr<SharedQuadState> shared_state = | 124 scoped_ptr<SharedQuadState> shared_state = |
119 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 125 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
120 shared_state->opacity = 0.5f; | 126 shared_state->opacity = 0.5f; |
121 | 127 |
122 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 128 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
123 blue->SetNew(shared_state.get(), | 129 blue->SetNew(shared_state.get(), |
124 gfx::Rect(0, | 130 gfx::Rect(0, |
125 0, | 131 0, |
126 device_viewport_size_.width() / 2, | 132 this->device_viewport_size_.width() / 2, |
127 device_viewport_size_.height()), | 133 this->device_viewport_size_.height()), |
128 SK_ColorBLUE); | 134 SK_ColorBLUE); |
129 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); | 135 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); |
130 yellow->SetNew(shared_state.get(), | 136 yellow->SetNew(shared_state.get(), |
131 gfx::Rect(device_viewport_size_.width() / 2, | 137 gfx::Rect(this->device_viewport_size_.width() / 2, |
132 0, | 138 0, |
133 device_viewport_size_.width() / 2, | 139 this->device_viewport_size_.width() / 2, |
134 device_viewport_size_.height()), | 140 this->device_viewport_size_.height()), |
135 SK_ColorYELLOW); | 141 SK_ColorYELLOW); |
136 | 142 |
137 scoped_ptr<SharedQuadState> blank_state = | 143 scoped_ptr<SharedQuadState> blank_state = |
138 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 144 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
139 | 145 |
140 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); | 146 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); |
141 white->SetNew(blank_state.get(), | 147 white->SetNew(blank_state.get(), |
142 viewport_rect, | 148 viewport_rect, |
143 SK_ColorWHITE); | 149 SK_ColorWHITE); |
144 | 150 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
182 WebKit::WebFilterOperations(), | 188 WebKit::WebFilterOperations(), |
183 filter, | 189 filter, |
184 WebKit::WebFilterOperations()); | 190 WebKit::WebFilterOperations()); |
185 | 191 |
186 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); | 192 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); |
187 | 193 |
188 RenderPassList pass_list; | 194 RenderPassList pass_list; |
189 pass_list.push_back(child_pass.Pass()); | 195 pass_list.push_back(child_pass.Pass()); |
190 pass_list.push_back(root_pass.Pass()); | 196 pass_list.push_back(root_pass.Pass()); |
191 | 197 |
192 EXPECT_TRUE(RunPixelTest( | 198 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl |
199 // renderer so use a fuzzy comparator. | |
200 EXPECT_TRUE(this->RunPixelTest( | |
193 &pass_list, | 201 &pass_list, |
194 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), | 202 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), |
195 ExactPixelComparator(false))); | 203 FuzzyPixelOffByOneComparator(false))); |
196 } | 204 } |
197 | 205 |
198 TEST_F(GLRendererPixelTest, FastPassColorFilterAlphaTranslation) { | 206 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) { |
199 gfx::Rect viewport_rect(device_viewport_size_); | 207 gfx::Rect viewport_rect(this->device_viewport_size_); |
200 | 208 |
201 RenderPass::Id root_pass_id(1, 1); | 209 RenderPass::Id root_pass_id(1, 1); |
202 scoped_ptr<RenderPass> root_pass = | 210 scoped_ptr<RenderPass> root_pass = |
203 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 211 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
204 | 212 |
205 RenderPass::Id child_pass_id(2, 2); | 213 RenderPass::Id child_pass_id(2, 2); |
206 gfx::Rect pass_rect(device_viewport_size_); | 214 gfx::Rect pass_rect(this->device_viewport_size_); |
207 gfx::Transform transform_to_root; | 215 gfx::Transform transform_to_root; |
208 scoped_ptr<RenderPass> child_pass = | 216 scoped_ptr<RenderPass> child_pass = |
209 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 217 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
210 | 218 |
211 gfx::Transform content_to_target_transform; | 219 gfx::Transform content_to_target_transform; |
212 scoped_ptr<SharedQuadState> shared_state = | 220 scoped_ptr<SharedQuadState> shared_state = |
213 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 221 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
214 shared_state->opacity = 0.5f; | 222 shared_state->opacity = 0.5f; |
215 | 223 |
216 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 224 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
217 blue->SetNew(shared_state.get(), | 225 blue->SetNew(shared_state.get(), |
218 gfx::Rect(0, | 226 gfx::Rect(0, |
219 0, | 227 0, |
220 device_viewport_size_.width() / 2, | 228 this->device_viewport_size_.width() / 2, |
221 device_viewport_size_.height()), | 229 this->device_viewport_size_.height()), |
222 SK_ColorBLUE); | 230 SK_ColorBLUE); |
223 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); | 231 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); |
224 yellow->SetNew(shared_state.get(), | 232 yellow->SetNew(shared_state.get(), |
225 gfx::Rect(device_viewport_size_.width() / 2, | 233 gfx::Rect(this->device_viewport_size_.width() / 2, |
226 0, | 234 0, |
227 device_viewport_size_.width() / 2, | 235 this->device_viewport_size_.width() / 2, |
228 device_viewport_size_.height()), | 236 this->device_viewport_size_.height()), |
229 SK_ColorYELLOW); | 237 SK_ColorYELLOW); |
230 | 238 |
231 scoped_ptr<SharedQuadState> blank_state = | 239 scoped_ptr<SharedQuadState> blank_state = |
232 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 240 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
233 | 241 |
234 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); | 242 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); |
235 white->SetNew(blank_state.get(), | 243 white->SetNew(blank_state.get(), |
236 viewport_rect, | 244 viewport_rect, |
237 SK_ColorWHITE); | 245 SK_ColorWHITE); |
238 | 246 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
279 WebKit::WebFilterOperations(), | 287 WebKit::WebFilterOperations(), |
280 filter, | 288 filter, |
281 WebKit::WebFilterOperations()); | 289 WebKit::WebFilterOperations()); |
282 | 290 |
283 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); | 291 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); |
284 RenderPassList pass_list; | 292 RenderPassList pass_list; |
285 | 293 |
286 pass_list.push_back(child_pass.Pass()); | 294 pass_list.push_back(child_pass.Pass()); |
287 pass_list.push_back(root_pass.Pass()); | 295 pass_list.push_back(root_pass.Pass()); |
288 | 296 |
289 EXPECT_TRUE(RunPixelTest( | 297 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl |
298 // renderer so use a fuzzy comparator. | |
299 EXPECT_TRUE(this->RunPixelTest( | |
290 &pass_list, | 300 &pass_list, |
291 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), | 301 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), |
292 ExactPixelComparator(false))); | 302 FuzzyPixelOffByOneComparator(false))); |
293 } | 303 } |
294 | 304 |
295 TEST_F(GLRendererPixelTest, RenderPassChangesSize) { | 305 TYPED_TEST(RendererPixelTest, RenderPassChangesSize) { |
296 gfx::Rect viewport_rect(device_viewport_size_); | 306 gfx::Rect viewport_rect(this->device_viewport_size_); |
297 | 307 |
298 RenderPass::Id root_pass_id(1, 1); | 308 RenderPass::Id root_pass_id(1, 1); |
299 scoped_ptr<RenderPass> root_pass = | 309 scoped_ptr<RenderPass> root_pass = |
300 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 310 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
301 | 311 |
302 RenderPass::Id child_pass_id(2, 2); | 312 RenderPass::Id child_pass_id(2, 2); |
303 gfx::Rect pass_rect(device_viewport_size_); | 313 gfx::Rect pass_rect(this->device_viewport_size_); |
304 gfx::Transform transform_to_root; | 314 gfx::Transform transform_to_root; |
305 scoped_ptr<RenderPass> child_pass = | 315 scoped_ptr<RenderPass> child_pass = |
306 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 316 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
307 | 317 |
308 gfx::Transform content_to_target_transform; | 318 gfx::Transform content_to_target_transform; |
309 scoped_ptr<SharedQuadState> shared_state = | 319 scoped_ptr<SharedQuadState> shared_state = |
310 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 320 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
311 | 321 |
312 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 322 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
313 blue->SetNew(shared_state.get(), | 323 blue->SetNew(shared_state.get(), |
314 gfx::Rect(0, | 324 gfx::Rect(0, |
315 0, | 325 0, |
316 device_viewport_size_.width() / 2, | 326 this->device_viewport_size_.width() / 2, |
317 device_viewport_size_.height()), | 327 this->device_viewport_size_.height()), |
318 SK_ColorBLUE); | 328 SK_ColorBLUE); |
319 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); | 329 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); |
320 yellow->SetNew(shared_state.get(), | 330 yellow->SetNew(shared_state.get(), |
321 gfx::Rect(device_viewport_size_.width() / 2, | 331 gfx::Rect(this->device_viewport_size_.width() / 2, |
322 0, | 332 0, |
323 device_viewport_size_.width() / 2, | 333 this->device_viewport_size_.width() / 2, |
324 device_viewport_size_.height()), | 334 this->device_viewport_size_.height()), |
325 SK_ColorYELLOW); | 335 SK_ColorYELLOW); |
326 | 336 |
327 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 337 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
328 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>()); | 338 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>()); |
329 | 339 |
330 scoped_ptr<SharedQuadState> pass_shared_state = | 340 scoped_ptr<SharedQuadState> pass_shared_state = |
331 CreateTestSharedQuadState(gfx::Transform(), pass_rect); | 341 CreateTestSharedQuadState(gfx::Transform(), pass_rect); |
332 root_pass->quad_list.push_back( | 342 root_pass->quad_list.push_back( |
333 CreateTestRenderPassDrawQuad(pass_shared_state.get(), | 343 CreateTestRenderPassDrawQuad(pass_shared_state.get(), |
334 pass_rect, | 344 pass_rect, |
335 child_pass_id)); | 345 child_pass_id)); |
336 | 346 |
337 RenderPassList pass_list; | 347 RenderPassList pass_list; |
338 pass_list.push_back(child_pass.Pass()); | 348 pass_list.push_back(child_pass.Pass()); |
339 pass_list.push_back(root_pass.Pass()); | 349 pass_list.push_back(root_pass.Pass()); |
340 | 350 |
341 renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); | 351 this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); |
342 | 352 |
343 EXPECT_TRUE(RunPixelTest( | 353 EXPECT_TRUE(this->RunPixelTest( |
344 &pass_list, | 354 &pass_list, |
345 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), | 355 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), |
346 ExactPixelComparator(true))); | 356 ExactPixelComparator(true))); |
347 } | 357 } |
348 | 358 |
349 class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest { | 359 template <typename RendererType> |
360 class RendererPixelTestWithBackgroundFilter | |
361 : public RendererPixelTest<RendererType> { | |
350 protected: | 362 protected: |
351 void SetUpRenderPassList() { | 363 void SetUpRenderPassList() { |
352 gfx::Rect device_viewport_rect(device_viewport_size_); | 364 gfx::Rect device_viewport_rect(this->device_viewport_size_); |
353 | 365 |
354 RenderPass::Id root_id(1, 1); | 366 RenderPass::Id root_id(1, 1); |
355 scoped_ptr<RenderPass> root_pass = | 367 scoped_ptr<RenderPass> root_pass = |
356 CreateTestRootRenderPass(root_id, device_viewport_rect); | 368 CreateTestRootRenderPass(root_id, device_viewport_rect); |
357 root_pass->has_transparent_background = false; | 369 root_pass->has_transparent_background = false; |
358 | 370 |
359 gfx::Transform identity_content_to_target_transform; | 371 gfx::Transform identity_content_to_target_transform; |
360 | 372 |
361 RenderPass::Id filter_pass_id(2, 1); | 373 RenderPass::Id filter_pass_id(2, 1); |
362 gfx::Transform transform_to_root; | 374 gfx::Transform transform_to_root; |
(...skipping 24 matching lines...) Expand all Loading... | |
387 filter_pass_quad->SetNew( | 399 filter_pass_quad->SetNew( |
388 shared_state.get(), | 400 shared_state.get(), |
389 filter_pass_content_rect_, | 401 filter_pass_content_rect_, |
390 filter_pass_id, | 402 filter_pass_id, |
391 false, // is_replica | 403 false, // is_replica |
392 0, // mask_resource_id | 404 0, // mask_resource_id |
393 filter_pass_content_rect_, // contents_changed_since_last_frame | 405 filter_pass_content_rect_, // contents_changed_since_last_frame |
394 gfx::RectF(), // mask_uv_rect | 406 gfx::RectF(), // mask_uv_rect |
395 WebKit::WebFilterOperations(), // filters | 407 WebKit::WebFilterOperations(), // filters |
396 skia::RefPtr<SkImageFilter>(), // filter | 408 skia::RefPtr<SkImageFilter>(), // filter |
397 background_filters_); | 409 this->background_filters_); |
398 root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>()); | 410 root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>()); |
399 root_pass->shared_quad_state_list.push_back(shared_state.Pass()); | 411 root_pass->shared_quad_state_list.push_back(shared_state.Pass()); |
400 } | 412 } |
401 | 413 |
402 const int kColumnWidth = device_viewport_rect.width() / 3; | 414 const int kColumnWidth = device_viewport_rect.width() / 3; |
403 | 415 |
404 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); | 416 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); |
405 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { | 417 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { |
406 scoped_ptr<SharedQuadState> shared_state = | 418 scoped_ptr<SharedQuadState> shared_state = |
407 CreateTestSharedQuadState(identity_content_to_target_transform, | 419 CreateTestSharedQuadState(identity_content_to_target_transform, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
451 pass_list_.push_back(filter_pass.Pass()); | 463 pass_list_.push_back(filter_pass.Pass()); |
452 pass_list_.push_back(root_pass.Pass()); | 464 pass_list_.push_back(root_pass.Pass()); |
453 } | 465 } |
454 | 466 |
455 RenderPassList pass_list_; | 467 RenderPassList pass_list_; |
456 WebKit::WebFilterOperations background_filters_; | 468 WebKit::WebFilterOperations background_filters_; |
457 gfx::Transform filter_pass_to_target_transform_; | 469 gfx::Transform filter_pass_to_target_transform_; |
458 gfx::Rect filter_pass_content_rect_; | 470 gfx::Rect filter_pass_content_rect_; |
459 }; | 471 }; |
460 | 472 |
473 typedef ::testing::Types<GLRenderer, SoftwareRenderer> RendererTypes; | |
474 TYPED_TEST_CASE(RendererPixelTestWithBackgroundFilter, RendererTypes); | |
475 | |
476 typedef RendererPixelTestWithBackgroundFilter<GLRenderer> | |
477 GLRendererPixelTestWithBackgroundFilter; | |
478 | |
479 // TODO(skaslev): The software renderer does not support filters yet. | |
461 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) { | 480 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) { |
462 background_filters_.append( | 481 this->background_filters_.append( |
463 WebKit::WebFilterOperation::createInvertFilter(1.f)); | 482 WebKit::WebFilterOperation::createInvertFilter(1.f)); |
464 | 483 |
465 filter_pass_content_rect_ = gfx::Rect(device_viewport_size_); | 484 this->filter_pass_content_rect_ = gfx::Rect(this->device_viewport_size_); |
466 filter_pass_content_rect_.Inset(12, 14, 16, 18); | 485 this->filter_pass_content_rect_.Inset(12, 14, 16, 18); |
467 | 486 |
468 SetUpRenderPassList(); | 487 this->SetUpRenderPassList(); |
469 EXPECT_TRUE(RunPixelTest( | 488 EXPECT_TRUE(this->RunPixelTest( |
470 &pass_list_, | 489 &this->pass_list_, |
471 base::FilePath(FILE_PATH_LITERAL("background_filter.png")), | 490 base::FilePath(FILE_PATH_LITERAL("background_filter.png")), |
472 ExactPixelComparator(true))); | 491 ExactPixelComparator(true))); |
473 } | 492 } |
474 | 493 |
494 // Software renderer does not support anti-aliased edges. | |
475 TEST_F(GLRendererPixelTest, AntiAliasing) { | 495 TEST_F(GLRendererPixelTest, AntiAliasing) { |
476 gfx::Rect rect(0, 0, 200, 200); | 496 gfx::Rect rect(0, 0, 200, 200); |
477 | 497 |
478 RenderPass::Id id(1, 1); | 498 RenderPass::Id id(1, 1); |
479 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 499 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
480 | 500 |
481 gfx::Transform red_content_to_target_transform; | 501 gfx::Transform red_content_to_target_transform; |
482 red_content_to_target_transform.Rotate(10); | 502 red_content_to_target_transform.Rotate(10); |
483 scoped_ptr<SharedQuadState> red_shared_state = | 503 scoped_ptr<SharedQuadState> red_shared_state = |
484 CreateTestSharedQuadState(red_content_to_target_transform, rect); | 504 CreateTestSharedQuadState(red_content_to_target_transform, rect); |
(...skipping 18 matching lines...) Expand all Loading... | |
503 CreateTestSharedQuadState(blue_content_to_target_transform, rect); | 523 CreateTestSharedQuadState(blue_content_to_target_transform, rect); |
504 | 524 |
505 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 525 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
506 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); | 526 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); |
507 | 527 |
508 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 528 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
509 | 529 |
510 RenderPassList pass_list; | 530 RenderPassList pass_list; |
511 pass_list.push_back(pass.Pass()); | 531 pass_list.push_back(pass.Pass()); |
512 | 532 |
513 EXPECT_TRUE(RunPixelTest( | 533 EXPECT_TRUE(this->RunPixelTest( |
514 &pass_list, | 534 &pass_list, |
515 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), | 535 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), |
516 ExactPixelComparator(true))); | 536 ExactPixelComparator(true))); |
517 } | 537 } |
518 | 538 |
539 // This test tests that anti-aliasing works for axis aligned quads. | |
540 // Anti-aliasing is only supported in the gl renderer. | |
519 TEST_F(GLRendererPixelTest, AxisAligned) { | 541 TEST_F(GLRendererPixelTest, AxisAligned) { |
520 gfx::Rect rect(0, 0, 200, 200); | 542 gfx::Rect rect(0, 0, 200, 200); |
521 | 543 |
522 RenderPass::Id id(1, 1); | 544 RenderPass::Id id(1, 1); |
523 gfx::Transform transform_to_root; | 545 gfx::Transform transform_to_root; |
524 scoped_ptr<RenderPass> pass = | 546 scoped_ptr<RenderPass> pass = |
525 CreateTestRenderPass(id, rect, transform_to_root); | 547 CreateTestRenderPass(id, rect, transform_to_root); |
526 | 548 |
527 gfx::Transform red_content_to_target_transform; | 549 gfx::Transform red_content_to_target_transform; |
528 red_content_to_target_transform.Translate(50, 50); | 550 red_content_to_target_transform.Translate(50, 50); |
(...skipping 24 matching lines...) Expand all Loading... | |
553 CreateTestSharedQuadState(blue_content_to_target_transform, rect); | 575 CreateTestSharedQuadState(blue_content_to_target_transform, rect); |
554 | 576 |
555 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 577 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
556 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); | 578 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); |
557 | 579 |
558 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 580 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
559 | 581 |
560 RenderPassList pass_list; | 582 RenderPassList pass_list; |
561 pass_list.push_back(pass.Pass()); | 583 pass_list.push_back(pass.Pass()); |
562 | 584 |
563 EXPECT_TRUE(RunPixelTest( | 585 EXPECT_TRUE(this->RunPixelTest( |
564 &pass_list, | 586 &pass_list, |
565 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), | 587 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), |
566 ExactPixelComparator(true))); | 588 ExactPixelComparator(true))); |
567 } | 589 } |
568 | 590 |
569 static void SyncPointCallback(int* callback_count) { | 591 static void SyncPointCallback(int* callback_count) { |
570 ++(*callback_count); | 592 ++(*callback_count); |
571 base::MessageLoop::current()->QuitWhenIdle(); | 593 base::MessageLoop::current()->QuitWhenIdle(); |
572 } | 594 } |
573 | 595 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
627 base::MessageLoop::current()->Run(); | 649 base::MessageLoop::current()->Run(); |
628 | 650 |
629 // The sync point should have happened. | 651 // The sync point should have happened. |
630 EXPECT_EQ(1, sync_point_callback_count); | 652 EXPECT_EQ(1, sync_point_callback_count); |
631 EXPECT_EQ(1, other_callback_count); | 653 EXPECT_EQ(1, other_callback_count); |
632 } | 654 } |
633 #endif | 655 #endif |
634 | 656 |
635 } // namespace | 657 } // namespace |
636 } // namespace cc | 658 } // namespace cc |
OLD | NEW |