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

Unified 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: Reintroduce the log spam 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 side-by-side diff with in-line comments
Download patch
Index: cc/output/renderer_pixeltest.cc
diff --git a/cc/output/gl_renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
similarity index 85%
rename from cc/output/gl_renderer_pixeltest.cc
rename to cc/output/renderer_pixeltest.cc
index 852c079e853974d7e9753e209b93381fae48ce14..fa06ea8b5ade83e22770b7e467f23ebf2882681c 100644
--- a/cc/output/gl_renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -2,10 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "cc/output/gl_renderer.h"
-
#include "base/message_loop.h"
#include "cc/layers/append_quads_data.h"
+#include "cc/output/gl_renderer.h"
#include "cc/quads/draw_quad.h"
#include "cc/resources/sync_point_helper.h"
#include "cc/test/pixel_test.h"
@@ -18,8 +17,6 @@
namespace cc {
namespace {
-class GLRendererPixelTest : public PixelTest {};
-
scoped_ptr<RenderPass> CreateTestRootRenderPass(RenderPass::Id id,
gfx::Rect rect) {
scoped_ptr<RenderPass> pass = RenderPass::Create();
@@ -75,10 +72,19 @@ scoped_ptr<DrawQuad> CreateTestRenderPassDrawQuad(
return quad.PassAs<DrawQuad>();
}
+typedef ::testing::Types<GLRenderer, SoftwareRenderer> RendererTypes;
+TYPED_TEST_CASE(RendererPixelTest, RendererTypes);
+
+// All pixels can be off by one, but any more than that is an error.
danakj 2013/04/29 14:15:49 Not super excited about this, we could easily cove
enne (OOO) 2013/04/29 16:00:54 Isn't the point of the fuzzy comparator so that we
+class FuzzyPixelOffByOneComparator : public FuzzyPixelComparator {
+ public:
+ explicit FuzzyPixelOffByOneComparator(bool discard_alpha)
+ : FuzzyPixelComparator(discard_alpha, 100.f, 0.f, 1.f, 1, 0) {}
+};
#if !defined(OS_ANDROID)
-TEST_F(GLRendererPixelTest, SimpleGreenRect) {
- gfx::Rect rect(device_viewport_size_);
+TYPED_TEST(RendererPixelTest, SimpleGreenRect) {
+ gfx::Rect rect(this->device_viewport_size_);
RenderPass::Id id(1, 1);
scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
@@ -95,21 +101,21 @@ TEST_F(GLRendererPixelTest, SimpleGreenRect) {
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- EXPECT_TRUE(RunPixelTest(
+ EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("green.png")),
ExactPixelComparator(true)));
}
-TEST_F(GLRendererPixelTest, FastPassColorFilterAlpha) {
- gfx::Rect viewport_rect(device_viewport_size_);
+TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) {
+ gfx::Rect viewport_rect(this->device_viewport_size_);
RenderPass::Id root_pass_id(1, 1);
scoped_ptr<RenderPass> root_pass =
CreateTestRootRenderPass(root_pass_id, viewport_rect);
RenderPass::Id child_pass_id(2, 2);
- gfx::Rect pass_rect(device_viewport_size_);
+ gfx::Rect pass_rect(this->device_viewport_size_);
gfx::Transform transform_to_root;
scoped_ptr<RenderPass> child_pass =
CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
@@ -123,15 +129,15 @@ TEST_F(GLRendererPixelTest, FastPassColorFilterAlpha) {
blue->SetNew(shared_state.get(),
gfx::Rect(0,
0,
- device_viewport_size_.width() / 2,
- device_viewport_size_.height()),
+ this->device_viewport_size_.width() / 2,
+ this->device_viewport_size_.height()),
SK_ColorBLUE);
scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
yellow->SetNew(shared_state.get(),
- gfx::Rect(device_viewport_size_.width() / 2,
+ gfx::Rect(this->device_viewport_size_.width() / 2,
0,
- device_viewport_size_.width() / 2,
- device_viewport_size_.height()),
+ this->device_viewport_size_.width() / 2,
+ this->device_viewport_size_.height()),
SK_ColorYELLOW);
scoped_ptr<SharedQuadState> blank_state =
@@ -189,21 +195,23 @@ TEST_F(GLRendererPixelTest, FastPassColorFilterAlpha) {
pass_list.push_back(child_pass.Pass());
pass_list.push_back(root_pass.Pass());
- EXPECT_TRUE(RunPixelTest(
+ // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
+ // renderer so use a fuzzy comparator.
+ EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")),
- ExactPixelComparator(false)));
+ FuzzyPixelOffByOneComparator(false)));
}
-TEST_F(GLRendererPixelTest, FastPassColorFilterAlphaTranslation) {
- gfx::Rect viewport_rect(device_viewport_size_);
+TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) {
+ gfx::Rect viewport_rect(this->device_viewport_size_);
RenderPass::Id root_pass_id(1, 1);
scoped_ptr<RenderPass> root_pass =
CreateTestRootRenderPass(root_pass_id, viewport_rect);
RenderPass::Id child_pass_id(2, 2);
- gfx::Rect pass_rect(device_viewport_size_);
+ gfx::Rect pass_rect(this->device_viewport_size_);
gfx::Transform transform_to_root;
scoped_ptr<RenderPass> child_pass =
CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
@@ -217,15 +225,15 @@ TEST_F(GLRendererPixelTest, FastPassColorFilterAlphaTranslation) {
blue->SetNew(shared_state.get(),
gfx::Rect(0,
0,
- device_viewport_size_.width() / 2,
- device_viewport_size_.height()),
+ this->device_viewport_size_.width() / 2,
+ this->device_viewport_size_.height()),
SK_ColorBLUE);
scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
yellow->SetNew(shared_state.get(),
- gfx::Rect(device_viewport_size_.width() / 2,
+ gfx::Rect(this->device_viewport_size_.width() / 2,
0,
- device_viewport_size_.width() / 2,
- device_viewport_size_.height()),
+ this->device_viewport_size_.width() / 2,
+ this->device_viewport_size_.height()),
SK_ColorYELLOW);
scoped_ptr<SharedQuadState> blank_state =
@@ -286,21 +294,23 @@ TEST_F(GLRendererPixelTest, FastPassColorFilterAlphaTranslation) {
pass_list.push_back(child_pass.Pass());
pass_list.push_back(root_pass.Pass());
- EXPECT_TRUE(RunPixelTest(
+ // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
+ // renderer so use a fuzzy comparator.
+ EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")),
- ExactPixelComparator(false)));
+ FuzzyPixelOffByOneComparator(false)));
}
-TEST_F(GLRendererPixelTest, RenderPassChangesSize) {
- gfx::Rect viewport_rect(device_viewport_size_);
+TYPED_TEST(RendererPixelTest, RenderPassChangesSize) {
+ gfx::Rect viewport_rect(this->device_viewport_size_);
RenderPass::Id root_pass_id(1, 1);
scoped_ptr<RenderPass> root_pass =
CreateTestRootRenderPass(root_pass_id, viewport_rect);
RenderPass::Id child_pass_id(2, 2);
- gfx::Rect pass_rect(device_viewport_size_);
+ gfx::Rect pass_rect(this->device_viewport_size_);
gfx::Transform transform_to_root;
scoped_ptr<RenderPass> child_pass =
CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
@@ -313,15 +323,15 @@ TEST_F(GLRendererPixelTest, RenderPassChangesSize) {
blue->SetNew(shared_state.get(),
gfx::Rect(0,
0,
- device_viewport_size_.width() / 2,
- device_viewport_size_.height()),
+ this->device_viewport_size_.width() / 2,
+ this->device_viewport_size_.height()),
SK_ColorBLUE);
scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
yellow->SetNew(shared_state.get(),
- gfx::Rect(device_viewport_size_.width() / 2,
+ gfx::Rect(this->device_viewport_size_.width() / 2,
0,
- device_viewport_size_.width() / 2,
- device_viewport_size_.height()),
+ this->device_viewport_size_.width() / 2,
+ this->device_viewport_size_.height()),
SK_ColorYELLOW);
child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
@@ -338,18 +348,20 @@ TEST_F(GLRendererPixelTest, RenderPassChangesSize) {
pass_list.push_back(child_pass.Pass());
pass_list.push_back(root_pass.Pass());
- renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75));
+ this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75));
- EXPECT_TRUE(RunPixelTest(
+ EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")),
ExactPixelComparator(true)));
}
-class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest {
+template <typename RendererType>
+class RendererPixelTestWithBackgroundFilter
+ : public RendererPixelTest<RendererType> {
protected:
void SetUpRenderPassList() {
- gfx::Rect device_viewport_rect(device_viewport_size_);
+ gfx::Rect device_viewport_rect(this->device_viewport_size_);
RenderPass::Id root_id(1, 1);
scoped_ptr<RenderPass> root_pass =
@@ -394,7 +406,7 @@ class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest {
gfx::RectF(), // mask_uv_rect
WebKit::WebFilterOperations(), // filters
skia::RefPtr<SkImageFilter>(), // filter
- background_filters_);
+ this->background_filters_);
root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>());
root_pass->shared_quad_state_list.push_back(shared_state.Pass());
}
@@ -458,20 +470,28 @@ class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest {
gfx::Rect filter_pass_content_rect_;
};
+typedef ::testing::Types<GLRenderer, SoftwareRenderer> RendererTypes;
+TYPED_TEST_CASE(RendererPixelTestWithBackgroundFilter, RendererTypes);
+
+typedef RendererPixelTestWithBackgroundFilter<GLRenderer>
+GLRendererPixelTestWithBackgroundFilter;
+
+// TODO(skaslev): The software renderer does not support filters yet.
TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) {
- background_filters_.append(
+ this->background_filters_.append(
WebKit::WebFilterOperation::createInvertFilter(1.f));
- filter_pass_content_rect_ = gfx::Rect(device_viewport_size_);
- filter_pass_content_rect_.Inset(12, 14, 16, 18);
+ this->filter_pass_content_rect_ = gfx::Rect(this->device_viewport_size_);
+ this->filter_pass_content_rect_.Inset(12, 14, 16, 18);
- SetUpRenderPassList();
- EXPECT_TRUE(RunPixelTest(
- &pass_list_,
+ this->SetUpRenderPassList();
+ EXPECT_TRUE(this->RunPixelTest(
+ &this->pass_list_,
base::FilePath(FILE_PATH_LITERAL("background_filter.png")),
ExactPixelComparator(true)));
}
+// Software renderer does not support anti-aliased edges.
TEST_F(GLRendererPixelTest, AntiAliasing) {
danakj 2013/04/29 14:15:49 Should GLRendererPixelTests move to a separate fil
enne (OOO) 2013/04/29 16:00:54 Maybe if we get more and this file gets unwieldy?
gfx::Rect rect(0, 0, 200, 200);
@@ -510,12 +530,14 @@ TEST_F(GLRendererPixelTest, AntiAliasing) {
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- EXPECT_TRUE(RunPixelTest(
+ EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")),
ExactPixelComparator(true)));
}
+// This test tests that anti-aliasing works for axis aligned quads.
+// Anti-aliasing is only supported in the gl renderer.
TEST_F(GLRendererPixelTest, AxisAligned) {
gfx::Rect rect(0, 0, 200, 200);
@@ -560,7 +582,7 @@ TEST_F(GLRendererPixelTest, AxisAligned) {
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
- EXPECT_TRUE(RunPixelTest(
+ EXPECT_TRUE(this->RunPixelTest(
&pass_list,
base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")),
ExactPixelComparator(true)));

Powered by Google App Engine
This is Rietveld 408576698