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

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: Fuzzy only for software Created 7 years, 7 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
« no previous file with comments | « cc/output/gl_renderer_unittest.cc ('k') | cc/test/pixel_comparator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 };
84
85 template <typename RendererType>
86 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator {
87 public:
88 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha)
89 : fuzzy_(discard_alpha), exact_(discard_alpha) {}
90
91 virtual bool Compare(const SkBitmap& actual_bmp,
92 const SkBitmap& expected_bmp) const;
93
94 private:
95 FuzzyPixelOffByOneComparator fuzzy_;
96 ExactPixelComparator exact_;
97 };
98
99 template<>
100 bool FuzzyForSoftwareOnlyPixelComparator<GLRenderer>::Compare(
101 const SkBitmap& actual_bmp,
102 const SkBitmap& expected_bmp) const {
103 return exact_.Compare(actual_bmp, expected_bmp);
104 }
105
106 template<>
107 bool FuzzyForSoftwareOnlyPixelComparator<SoftwareRenderer>::Compare(
108 const SkBitmap& actual_bmp,
109 const SkBitmap& expected_bmp) const {
110 return fuzzy_.Compare(actual_bmp, expected_bmp);
111 }
78 112
79 #if !defined(OS_ANDROID) 113 #if !defined(OS_ANDROID)
80 TEST_F(GLRendererPixelTest, SimpleGreenRect) { 114 TYPED_TEST(RendererPixelTest, SimpleGreenRect) {
81 gfx::Rect rect(device_viewport_size_); 115 gfx::Rect rect(this->device_viewport_size_);
82 116
83 RenderPass::Id id(1, 1); 117 RenderPass::Id id(1, 1);
84 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 118 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
85 119
86 gfx::Transform content_to_target_transform; 120 gfx::Transform content_to_target_transform;
87 scoped_ptr<SharedQuadState> shared_state = 121 scoped_ptr<SharedQuadState> shared_state =
88 CreateTestSharedQuadState(content_to_target_transform, rect); 122 CreateTestSharedQuadState(content_to_target_transform, rect);
89 123
90 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 124 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
91 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); 125 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN);
92 126
93 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); 127 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
94 128
95 RenderPassList pass_list; 129 RenderPassList pass_list;
96 pass_list.push_back(pass.Pass()); 130 pass_list.push_back(pass.Pass());
97 131
98 EXPECT_TRUE(RunPixelTest( 132 EXPECT_TRUE(this->RunPixelTest(
99 &pass_list, 133 &pass_list,
100 base::FilePath(FILE_PATH_LITERAL("green.png")), 134 base::FilePath(FILE_PATH_LITERAL("green.png")),
101 ExactPixelComparator(true))); 135 ExactPixelComparator(true)));
102 } 136 }
103 137
104 TEST_F(GLRendererPixelTest, FastPassColorFilterAlpha) { 138 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) {
105 gfx::Rect viewport_rect(device_viewport_size_); 139 gfx::Rect viewport_rect(this->device_viewport_size_);
106 140
107 RenderPass::Id root_pass_id(1, 1); 141 RenderPass::Id root_pass_id(1, 1);
108 scoped_ptr<RenderPass> root_pass = 142 scoped_ptr<RenderPass> root_pass =
109 CreateTestRootRenderPass(root_pass_id, viewport_rect); 143 CreateTestRootRenderPass(root_pass_id, viewport_rect);
110 144
111 RenderPass::Id child_pass_id(2, 2); 145 RenderPass::Id child_pass_id(2, 2);
112 gfx::Rect pass_rect(device_viewport_size_); 146 gfx::Rect pass_rect(this->device_viewport_size_);
113 gfx::Transform transform_to_root; 147 gfx::Transform transform_to_root;
114 scoped_ptr<RenderPass> child_pass = 148 scoped_ptr<RenderPass> child_pass =
115 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 149 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
116 150
117 gfx::Transform content_to_target_transform; 151 gfx::Transform content_to_target_transform;
118 scoped_ptr<SharedQuadState> shared_state = 152 scoped_ptr<SharedQuadState> shared_state =
119 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); 153 CreateTestSharedQuadState(content_to_target_transform, viewport_rect);
120 shared_state->opacity = 0.5f; 154 shared_state->opacity = 0.5f;
121 155
122 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 156 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
123 blue->SetNew(shared_state.get(), 157 blue->SetNew(shared_state.get(),
124 gfx::Rect(0, 158 gfx::Rect(0,
125 0, 159 0,
126 device_viewport_size_.width() / 2, 160 this->device_viewport_size_.width() / 2,
127 device_viewport_size_.height()), 161 this->device_viewport_size_.height()),
128 SK_ColorBLUE); 162 SK_ColorBLUE);
129 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 163 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
130 yellow->SetNew(shared_state.get(), 164 yellow->SetNew(shared_state.get(),
131 gfx::Rect(device_viewport_size_.width() / 2, 165 gfx::Rect(this->device_viewport_size_.width() / 2,
132 0, 166 0,
133 device_viewport_size_.width() / 2, 167 this->device_viewport_size_.width() / 2,
134 device_viewport_size_.height()), 168 this->device_viewport_size_.height()),
135 SK_ColorYELLOW); 169 SK_ColorYELLOW);
136 170
137 scoped_ptr<SharedQuadState> blank_state = 171 scoped_ptr<SharedQuadState> blank_state =
138 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); 172 CreateTestSharedQuadState(content_to_target_transform, viewport_rect);
139 173
140 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); 174 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create();
141 white->SetNew(blank_state.get(), 175 white->SetNew(blank_state.get(),
142 viewport_rect, 176 viewport_rect,
143 SK_ColorWHITE); 177 SK_ColorWHITE);
144 178
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 WebKit::WebFilterOperations(), 216 WebKit::WebFilterOperations(),
183 filter, 217 filter,
184 WebKit::WebFilterOperations()); 218 WebKit::WebFilterOperations());
185 219
186 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); 220 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>());
187 221
188 RenderPassList pass_list; 222 RenderPassList pass_list;
189 pass_list.push_back(child_pass.Pass()); 223 pass_list.push_back(child_pass.Pass());
190 pass_list.push_back(root_pass.Pass()); 224 pass_list.push_back(root_pass.Pass());
191 225
192 EXPECT_TRUE(RunPixelTest( 226 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
227 // renderer so use a fuzzy comparator.
228 EXPECT_TRUE(this->RunPixelTest(
193 &pass_list, 229 &pass_list,
194 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), 230 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")),
195 ExactPixelComparator(false))); 231 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
196 } 232 }
197 233
198 TEST_F(GLRendererPixelTest, FastPassColorFilterAlphaTranslation) { 234 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) {
199 gfx::Rect viewport_rect(device_viewport_size_); 235 gfx::Rect viewport_rect(this->device_viewport_size_);
200 236
201 RenderPass::Id root_pass_id(1, 1); 237 RenderPass::Id root_pass_id(1, 1);
202 scoped_ptr<RenderPass> root_pass = 238 scoped_ptr<RenderPass> root_pass =
203 CreateTestRootRenderPass(root_pass_id, viewport_rect); 239 CreateTestRootRenderPass(root_pass_id, viewport_rect);
204 240
205 RenderPass::Id child_pass_id(2, 2); 241 RenderPass::Id child_pass_id(2, 2);
206 gfx::Rect pass_rect(device_viewport_size_); 242 gfx::Rect pass_rect(this->device_viewport_size_);
207 gfx::Transform transform_to_root; 243 gfx::Transform transform_to_root;
208 scoped_ptr<RenderPass> child_pass = 244 scoped_ptr<RenderPass> child_pass =
209 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 245 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
210 246
211 gfx::Transform content_to_target_transform; 247 gfx::Transform content_to_target_transform;
212 scoped_ptr<SharedQuadState> shared_state = 248 scoped_ptr<SharedQuadState> shared_state =
213 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); 249 CreateTestSharedQuadState(content_to_target_transform, viewport_rect);
214 shared_state->opacity = 0.5f; 250 shared_state->opacity = 0.5f;
215 251
216 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 252 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
217 blue->SetNew(shared_state.get(), 253 blue->SetNew(shared_state.get(),
218 gfx::Rect(0, 254 gfx::Rect(0,
219 0, 255 0,
220 device_viewport_size_.width() / 2, 256 this->device_viewport_size_.width() / 2,
221 device_viewport_size_.height()), 257 this->device_viewport_size_.height()),
222 SK_ColorBLUE); 258 SK_ColorBLUE);
223 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 259 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
224 yellow->SetNew(shared_state.get(), 260 yellow->SetNew(shared_state.get(),
225 gfx::Rect(device_viewport_size_.width() / 2, 261 gfx::Rect(this->device_viewport_size_.width() / 2,
226 0, 262 0,
227 device_viewport_size_.width() / 2, 263 this->device_viewport_size_.width() / 2,
228 device_viewport_size_.height()), 264 this->device_viewport_size_.height()),
229 SK_ColorYELLOW); 265 SK_ColorYELLOW);
230 266
231 scoped_ptr<SharedQuadState> blank_state = 267 scoped_ptr<SharedQuadState> blank_state =
232 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); 268 CreateTestSharedQuadState(content_to_target_transform, viewport_rect);
233 269
234 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); 270 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create();
235 white->SetNew(blank_state.get(), 271 white->SetNew(blank_state.get(),
236 viewport_rect, 272 viewport_rect,
237 SK_ColorWHITE); 273 SK_ColorWHITE);
238 274
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 WebKit::WebFilterOperations(), 315 WebKit::WebFilterOperations(),
280 filter, 316 filter,
281 WebKit::WebFilterOperations()); 317 WebKit::WebFilterOperations());
282 318
283 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); 319 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>());
284 RenderPassList pass_list; 320 RenderPassList pass_list;
285 321
286 pass_list.push_back(child_pass.Pass()); 322 pass_list.push_back(child_pass.Pass());
287 pass_list.push_back(root_pass.Pass()); 323 pass_list.push_back(root_pass.Pass());
288 324
289 EXPECT_TRUE(RunPixelTest( 325 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
326 // renderer so use a fuzzy comparator.
327 EXPECT_TRUE(this->RunPixelTest(
290 &pass_list, 328 &pass_list,
291 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), 329 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")),
292 ExactPixelComparator(false))); 330 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
293 } 331 }
294 332
295 TEST_F(GLRendererPixelTest, RenderPassChangesSize) { 333 TYPED_TEST(RendererPixelTest, RenderPassChangesSize) {
296 gfx::Rect viewport_rect(device_viewport_size_); 334 gfx::Rect viewport_rect(this->device_viewport_size_);
297 335
298 RenderPass::Id root_pass_id(1, 1); 336 RenderPass::Id root_pass_id(1, 1);
299 scoped_ptr<RenderPass> root_pass = 337 scoped_ptr<RenderPass> root_pass =
300 CreateTestRootRenderPass(root_pass_id, viewport_rect); 338 CreateTestRootRenderPass(root_pass_id, viewport_rect);
301 339
302 RenderPass::Id child_pass_id(2, 2); 340 RenderPass::Id child_pass_id(2, 2);
303 gfx::Rect pass_rect(device_viewport_size_); 341 gfx::Rect pass_rect(this->device_viewport_size_);
304 gfx::Transform transform_to_root; 342 gfx::Transform transform_to_root;
305 scoped_ptr<RenderPass> child_pass = 343 scoped_ptr<RenderPass> child_pass =
306 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 344 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
307 345
308 gfx::Transform content_to_target_transform; 346 gfx::Transform content_to_target_transform;
309 scoped_ptr<SharedQuadState> shared_state = 347 scoped_ptr<SharedQuadState> shared_state =
310 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); 348 CreateTestSharedQuadState(content_to_target_transform, viewport_rect);
311 349
312 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 350 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
313 blue->SetNew(shared_state.get(), 351 blue->SetNew(shared_state.get(),
314 gfx::Rect(0, 352 gfx::Rect(0,
315 0, 353 0,
316 device_viewport_size_.width() / 2, 354 this->device_viewport_size_.width() / 2,
317 device_viewport_size_.height()), 355 this->device_viewport_size_.height()),
318 SK_ColorBLUE); 356 SK_ColorBLUE);
319 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 357 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
320 yellow->SetNew(shared_state.get(), 358 yellow->SetNew(shared_state.get(),
321 gfx::Rect(device_viewport_size_.width() / 2, 359 gfx::Rect(this->device_viewport_size_.width() / 2,
322 0, 360 0,
323 device_viewport_size_.width() / 2, 361 this->device_viewport_size_.width() / 2,
324 device_viewport_size_.height()), 362 this->device_viewport_size_.height()),
325 SK_ColorYELLOW); 363 SK_ColorYELLOW);
326 364
327 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>()); 365 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
328 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>()); 366 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
329 367
330 scoped_ptr<SharedQuadState> pass_shared_state = 368 scoped_ptr<SharedQuadState> pass_shared_state =
331 CreateTestSharedQuadState(gfx::Transform(), pass_rect); 369 CreateTestSharedQuadState(gfx::Transform(), pass_rect);
332 root_pass->quad_list.push_back( 370 root_pass->quad_list.push_back(
333 CreateTestRenderPassDrawQuad(pass_shared_state.get(), 371 CreateTestRenderPassDrawQuad(pass_shared_state.get(),
334 pass_rect, 372 pass_rect,
335 child_pass_id)); 373 child_pass_id));
336 374
337 RenderPassList pass_list; 375 RenderPassList pass_list;
338 pass_list.push_back(child_pass.Pass()); 376 pass_list.push_back(child_pass.Pass());
339 pass_list.push_back(root_pass.Pass()); 377 pass_list.push_back(root_pass.Pass());
340 378
341 renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); 379 this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75));
342 380
343 EXPECT_TRUE(RunPixelTest( 381 EXPECT_TRUE(this->RunPixelTest(
344 &pass_list, 382 &pass_list,
345 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), 383 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")),
346 ExactPixelComparator(true))); 384 ExactPixelComparator(true)));
347 } 385 }
348 386
349 class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest { 387 template <typename RendererType>
388 class RendererPixelTestWithBackgroundFilter
389 : public RendererPixelTest<RendererType> {
350 protected: 390 protected:
351 void SetUpRenderPassList() { 391 void SetUpRenderPassList() {
352 gfx::Rect device_viewport_rect(device_viewport_size_); 392 gfx::Rect device_viewport_rect(this->device_viewport_size_);
353 393
354 RenderPass::Id root_id(1, 1); 394 RenderPass::Id root_id(1, 1);
355 scoped_ptr<RenderPass> root_pass = 395 scoped_ptr<RenderPass> root_pass =
356 CreateTestRootRenderPass(root_id, device_viewport_rect); 396 CreateTestRootRenderPass(root_id, device_viewport_rect);
357 root_pass->has_transparent_background = false; 397 root_pass->has_transparent_background = false;
358 398
359 gfx::Transform identity_content_to_target_transform; 399 gfx::Transform identity_content_to_target_transform;
360 400
361 RenderPass::Id filter_pass_id(2, 1); 401 RenderPass::Id filter_pass_id(2, 1);
362 gfx::Transform transform_to_root; 402 gfx::Transform transform_to_root;
(...skipping 24 matching lines...) Expand all
387 filter_pass_quad->SetNew( 427 filter_pass_quad->SetNew(
388 shared_state.get(), 428 shared_state.get(),
389 filter_pass_content_rect_, 429 filter_pass_content_rect_,
390 filter_pass_id, 430 filter_pass_id,
391 false, // is_replica 431 false, // is_replica
392 0, // mask_resource_id 432 0, // mask_resource_id
393 filter_pass_content_rect_, // contents_changed_since_last_frame 433 filter_pass_content_rect_, // contents_changed_since_last_frame
394 gfx::RectF(), // mask_uv_rect 434 gfx::RectF(), // mask_uv_rect
395 WebKit::WebFilterOperations(), // filters 435 WebKit::WebFilterOperations(), // filters
396 skia::RefPtr<SkImageFilter>(), // filter 436 skia::RefPtr<SkImageFilter>(), // filter
397 background_filters_); 437 this->background_filters_);
398 root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>()); 438 root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>());
399 root_pass->shared_quad_state_list.push_back(shared_state.Pass()); 439 root_pass->shared_quad_state_list.push_back(shared_state.Pass());
400 } 440 }
401 441
402 const int kColumnWidth = device_viewport_rect.width() / 3; 442 const int kColumnWidth = device_viewport_rect.width() / 3;
403 443
404 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); 444 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20);
405 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { 445 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) {
406 scoped_ptr<SharedQuadState> shared_state = 446 scoped_ptr<SharedQuadState> shared_state =
407 CreateTestSharedQuadState(identity_content_to_target_transform, 447 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()); 491 pass_list_.push_back(filter_pass.Pass());
452 pass_list_.push_back(root_pass.Pass()); 492 pass_list_.push_back(root_pass.Pass());
453 } 493 }
454 494
455 RenderPassList pass_list_; 495 RenderPassList pass_list_;
456 WebKit::WebFilterOperations background_filters_; 496 WebKit::WebFilterOperations background_filters_;
457 gfx::Transform filter_pass_to_target_transform_; 497 gfx::Transform filter_pass_to_target_transform_;
458 gfx::Rect filter_pass_content_rect_; 498 gfx::Rect filter_pass_content_rect_;
459 }; 499 };
460 500
501 typedef ::testing::Types<GLRenderer, SoftwareRenderer> RendererTypes;
502 TYPED_TEST_CASE(RendererPixelTestWithBackgroundFilter, RendererTypes);
503
504 typedef RendererPixelTestWithBackgroundFilter<GLRenderer>
505 GLRendererPixelTestWithBackgroundFilter;
506
507 // TODO(skaslev): The software renderer does not support filters yet.
461 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) { 508 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) {
462 background_filters_.append( 509 this->background_filters_.append(
463 WebKit::WebFilterOperation::createInvertFilter(1.f)); 510 WebKit::WebFilterOperation::createInvertFilter(1.f));
464 511
465 filter_pass_content_rect_ = gfx::Rect(device_viewport_size_); 512 this->filter_pass_content_rect_ = gfx::Rect(this->device_viewport_size_);
466 filter_pass_content_rect_.Inset(12, 14, 16, 18); 513 this->filter_pass_content_rect_.Inset(12, 14, 16, 18);
467 514
468 SetUpRenderPassList(); 515 this->SetUpRenderPassList();
469 EXPECT_TRUE(RunPixelTest( 516 EXPECT_TRUE(this->RunPixelTest(
470 &pass_list_, 517 &this->pass_list_,
471 base::FilePath(FILE_PATH_LITERAL("background_filter.png")), 518 base::FilePath(FILE_PATH_LITERAL("background_filter.png")),
472 ExactPixelComparator(true))); 519 ExactPixelComparator(true)));
473 } 520 }
474 521
522 // Software renderer does not support anti-aliased edges.
475 TEST_F(GLRendererPixelTest, AntiAliasing) { 523 TEST_F(GLRendererPixelTest, AntiAliasing) {
476 gfx::Rect rect(0, 0, 200, 200); 524 gfx::Rect rect(0, 0, 200, 200);
477 525
478 RenderPass::Id id(1, 1); 526 RenderPass::Id id(1, 1);
479 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 527 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
480 528
481 gfx::Transform red_content_to_target_transform; 529 gfx::Transform red_content_to_target_transform;
482 red_content_to_target_transform.Rotate(10); 530 red_content_to_target_transform.Rotate(10);
483 scoped_ptr<SharedQuadState> red_shared_state = 531 scoped_ptr<SharedQuadState> red_shared_state =
484 CreateTestSharedQuadState(red_content_to_target_transform, rect); 532 CreateTestSharedQuadState(red_content_to_target_transform, rect);
(...skipping 18 matching lines...) Expand all
503 CreateTestSharedQuadState(blue_content_to_target_transform, rect); 551 CreateTestSharedQuadState(blue_content_to_target_transform, rect);
504 552
505 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 553 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
506 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); 554 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE);
507 555
508 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); 556 pass->quad_list.push_back(blue.PassAs<DrawQuad>());
509 557
510 RenderPassList pass_list; 558 RenderPassList pass_list;
511 pass_list.push_back(pass.Pass()); 559 pass_list.push_back(pass.Pass());
512 560
513 EXPECT_TRUE(RunPixelTest( 561 EXPECT_TRUE(this->RunPixelTest(
514 &pass_list, 562 &pass_list,
515 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), 563 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")),
516 ExactPixelComparator(true))); 564 ExactPixelComparator(true)));
517 } 565 }
518 566
567 // This test tests that anti-aliasing works for axis aligned quads.
568 // Anti-aliasing is only supported in the gl renderer.
519 TEST_F(GLRendererPixelTest, AxisAligned) { 569 TEST_F(GLRendererPixelTest, AxisAligned) {
520 gfx::Rect rect(0, 0, 200, 200); 570 gfx::Rect rect(0, 0, 200, 200);
521 571
522 RenderPass::Id id(1, 1); 572 RenderPass::Id id(1, 1);
523 gfx::Transform transform_to_root; 573 gfx::Transform transform_to_root;
524 scoped_ptr<RenderPass> pass = 574 scoped_ptr<RenderPass> pass =
525 CreateTestRenderPass(id, rect, transform_to_root); 575 CreateTestRenderPass(id, rect, transform_to_root);
526 576
527 gfx::Transform red_content_to_target_transform; 577 gfx::Transform red_content_to_target_transform;
528 red_content_to_target_transform.Translate(50, 50); 578 red_content_to_target_transform.Translate(50, 50);
(...skipping 24 matching lines...) Expand all
553 CreateTestSharedQuadState(blue_content_to_target_transform, rect); 603 CreateTestSharedQuadState(blue_content_to_target_transform, rect);
554 604
555 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 605 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
556 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); 606 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE);
557 607
558 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); 608 pass->quad_list.push_back(blue.PassAs<DrawQuad>());
559 609
560 RenderPassList pass_list; 610 RenderPassList pass_list;
561 pass_list.push_back(pass.Pass()); 611 pass_list.push_back(pass.Pass());
562 612
563 EXPECT_TRUE(RunPixelTest( 613 EXPECT_TRUE(this->RunPixelTest(
564 &pass_list, 614 &pass_list,
565 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), 615 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")),
566 ExactPixelComparator(true))); 616 ExactPixelComparator(true)));
567 } 617 }
568 618
569 static void SyncPointCallback(int* callback_count) { 619 static void SyncPointCallback(int* callback_count) {
570 ++(*callback_count); 620 ++(*callback_count);
571 base::MessageLoop::current()->QuitWhenIdle(); 621 base::MessageLoop::current()->QuitWhenIdle();
572 } 622 }
573 623
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 base::MessageLoop::current()->Run(); 677 base::MessageLoop::current()->Run();
628 678
629 // The sync point should have happened. 679 // The sync point should have happened.
630 EXPECT_EQ(1, sync_point_callback_count); 680 EXPECT_EQ(1, sync_point_callback_count);
631 EXPECT_EQ(1, other_callback_count); 681 EXPECT_EQ(1, other_callback_count);
632 } 682 }
633 #endif 683 #endif
634 684
635 } // namespace 685 } // namespace
636 } // namespace cc 686 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer_unittest.cc ('k') | cc/test/pixel_comparator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698