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

Side by Side Diff: cc/output/renderer_pixeltest.cc

Issue 14135011: cc: Add software renderer pixel tests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698