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

Unified Diff: cc/trees/layer_tree_host_pixeltest_blending.cc

Issue 723343002: Update from https://crrev.com/304121 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_pixeltest_filters.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_pixeltest_blending.cc
diff --git a/cc/trees/layer_tree_host_pixeltest_blending.cc b/cc/trees/layer_tree_host_pixeltest_blending.cc
index 7a9ef2123836ed8549689b9025dbb432a4c8a95c..148769e56f8caaa0495383870d0d743b07361230 100644
--- a/cc/trees/layer_tree_host_pixeltest_blending.cc
+++ b/cc/trees/layer_tree_host_pixeltest_blending.cc
@@ -52,25 +52,29 @@ using RenderPassOptions = uint32;
const uint32 kUseMasks = 1 << 0;
const uint32 kUseAntialiasing = 1 << 1;
const uint32 kUseColorMatrix = 1 << 2;
+const uint32 kForceShaders = 1 << 3;
class LayerTreeHostBlendingPixelTest : public LayerTreePixelTest {
public:
- LayerTreeHostBlendingPixelTest() {
+ LayerTreeHostBlendingPixelTest()
+ : force_antialiasing_(false), force_blending_with_shaders_(false) {
pixel_comparator_.reset(new FuzzyPixelOffByOneComparator(true));
}
virtual void InitializeSettings(LayerTreeSettings* settings) override {
settings->force_antialiasing = force_antialiasing_;
+ settings->force_blending_with_shaders = force_blending_with_shaders_;
}
protected:
void RunBlendingWithRootPixelTestType(PixelTestType type) {
- const int kLaneWidth = 15;
- const int kLaneHeight = kBlendModesCount * kLaneWidth;
- const int kRootSize = (kBlendModesCount + 2) * kLaneWidth;
+ const int kLaneWidth = 2;
+ const int kLaneHeight = kLaneWidth;
+ const int kRootWidth = (kBlendModesCount + 2) * kLaneWidth;
+ const int kRootHeight = 2 * kLaneWidth + kLaneHeight;
scoped_refptr<SolidColorLayer> background =
- CreateSolidColorLayer(gfx::Rect(kRootSize, kRootSize), kCSSOrange);
+ CreateSolidColorLayer(gfx::Rect(kRootWidth, kRootHeight), kCSSOrange);
// Orange child layers will blend with the green background
for (int i = 0; i < kBlendModesCount; ++i) {
@@ -88,15 +92,16 @@ class LayerTreeHostBlendingPixelTest : public LayerTreePixelTest {
}
void RunBlendingWithTransparentPixelTestType(PixelTestType type) {
- const int kLaneWidth = 15;
- const int kLaneHeight = kBlendModesCount * kLaneWidth;
- const int kRootSize = (kBlendModesCount + 2) * kLaneWidth;
+ const int kLaneWidth = 2;
+ const int kLaneHeight = 3 * kLaneWidth;
+ const int kRootWidth = (kBlendModesCount + 2) * kLaneWidth;
+ const int kRootHeight = 2 * kLaneWidth + kLaneHeight;
scoped_refptr<SolidColorLayer> root =
- CreateSolidColorLayer(gfx::Rect(kRootSize, kRootSize), kCSSBrown);
+ CreateSolidColorLayer(gfx::Rect(kRootWidth, kRootHeight), kCSSBrown);
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer(
- gfx::Rect(0, kLaneWidth * 2, kRootSize, kLaneWidth), kCSSOrange);
+ gfx::Rect(0, kLaneWidth * 2, kRootWidth, kLaneWidth), kCSSOrange);
root->AddChild(background);
background->SetIsRootForIsolatedGroup(true);
@@ -138,7 +143,7 @@ class LayerTreeHostBlendingPixelTest : public LayerTreePixelTest {
}
void SetupMaskLayer(scoped_refptr<Layer> layer) {
- const int kMaskOffset = 5;
+ const int kMaskOffset = 2;
gfx::Size bounds = layer->bounds();
scoped_refptr<ImageLayer> mask = ImageLayer::Create();
mask->SetIsDrawable(true);
@@ -162,23 +167,22 @@ class LayerTreeHostBlendingPixelTest : public LayerTreePixelTest {
void SetupColorMatrix(scoped_refptr<Layer> layer) {
FilterOperations filter_operations;
- filter_operations.Append(FilterOperation::CreateSepiaFilter(1.f));
+ filter_operations.Append(FilterOperation::CreateSepiaFilter(.001f));
layer->SetFilters(filter_operations);
}
- void CreateBlendingColorLayers(int width,
- int height,
+ void CreateBlendingColorLayers(int lane_width,
+ int lane_height,
scoped_refptr<Layer> background,
RenderPassOptions flags) {
const int kLanesCount = kBlendModesCount + 4;
- int lane_width = width / kLanesCount;
const SkColor kMiscOpaqueColor = 0xffc86464;
const SkColor kMiscTransparentColor = 0x80c86464;
const SkXfermode::Mode kCoeffBlendMode = SkXfermode::kScreen_Mode;
const SkXfermode::Mode kShaderBlendMode = SkXfermode::kColorBurn_Mode;
// add vertical lanes with each of the blend modes
for (int i = 0; i < kLanesCount; ++i) {
- gfx::Rect child_rect(i * lane_width, 0, lane_width, height);
+ gfx::Rect child_rect(i * lane_width, 0, lane_width, lane_height);
SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode;
float opacity = 1.f;
SkColor color = kMiscOpaqueColor;
@@ -216,7 +220,9 @@ class LayerTreeHostBlendingPixelTest : public LayerTreePixelTest {
void RunBlendingWithRenderPass(PixelTestType type,
const base::FilePath::CharType* expected_path,
RenderPassOptions flags) {
- const int kRootSize = 400;
+ const int kLaneWidth = 8;
+ const int kLaneHeight = kLaneWidth * kCSSTestColorsCount;
+ const int kRootSize = kLaneHeight;
scoped_refptr<SolidColorLayer> root =
CreateSolidColorLayer(gfx::Rect(kRootSize, kRootSize), SK_ColorWHITE);
@@ -226,47 +232,25 @@ class LayerTreeHostBlendingPixelTest : public LayerTreePixelTest {
background->SetIsRootForIsolatedGroup(true);
root->AddChild(background);
- CreateBlendingColorLayers(kRootSize, kRootSize, background.get(), flags);
+ CreateBlendingColorLayers(kLaneWidth, kLaneHeight, background.get(), flags);
this->impl_side_painting_ = false;
this->force_antialiasing_ = (flags & kUseAntialiasing);
+ this->force_blending_with_shaders_ = (flags & kForceShaders);
if ((flags & kUseAntialiasing) && (type == PIXEL_TEST_GL)) {
- // Anti aliasing causes differences up to 7 pixels at the edges.
- // Several pixels have 9 units difference on the alpha channel.
- int large_error_allowed = (flags & kUseMasks) ? 7 : 9;
+ // Anti aliasing causes differences up to 8 pixels at the edges.
+ int large_error_allowed = 8;
// Blending results might differ with one pixel.
int small_error_allowed = 1;
// Most of the errors are one pixel errors.
- float percentage_pixels_small_error = (flags & kUseMasks) ? 7.7f : 12.1f;
- // Because of anti-aliasing, around 3% of pixels (at the edges) have
+ float percentage_pixels_small_error = 13.1f;
+ // Because of anti-aliasing, around 10% of pixels (at the edges) have
// bigger errors (from small_error_allowed + 1 to large_error_allowed).
- float percentage_pixels_error = (flags & kUseMasks) ? 12.4f : 15.f;
+ float percentage_pixels_error = 22.5f;
// The average error is still close to 1.
- float average_error_allowed_in_bad_pixels =
- (flags & kUseMasks) ? 1.3f : 1.f;
+ float average_error_allowed_in_bad_pixels = 1.4f;
- // The sepia filter generates more small errors, but the number of large
- // errors remains around 3%.
- if (flags & kUseColorMatrix) {
- percentage_pixels_small_error = (flags & kUseMasks) ? 14.0f : 26.f;
- percentage_pixels_error = (flags & kUseMasks) ? 18.5f : 29.f;
- average_error_allowed_in_bad_pixels = (flags & kUseMasks) ? 0.9f : 0.7f;
- }
-
- pixel_comparator_.reset(
- new FuzzyPixelComparator(false, // discard_alpha
- percentage_pixels_error,
- percentage_pixels_small_error,
- average_error_allowed_in_bad_pixels,
- large_error_allowed,
- small_error_allowed));
- } else if ((flags & kUseColorMatrix) && (type == PIXEL_TEST_GL)) {
- float percentage_pixels_error = 100.f;
- float percentage_pixels_small_error = 0.f;
- float average_error_allowed_in_bad_pixels = 1.f;
- int large_error_allowed = 2;
- int small_error_allowed = 0;
pixel_comparator_.reset(
new FuzzyPixelComparator(false, // discard_alpha
percentage_pixels_error,
@@ -279,7 +263,8 @@ class LayerTreeHostBlendingPixelTest : public LayerTreePixelTest {
RunPixelTest(type, root, base::FilePath(expected_path));
}
- bool force_antialiasing_ = false;
+ bool force_antialiasing_;
+ bool force_blending_with_shaders_;
};
TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRoot_GL) {
@@ -291,12 +276,13 @@ TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRoot_Software) {
}
TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithBackgroundFilter) {
- const int kLaneWidth = 15;
- const int kLaneHeight = kBlendModesCount * kLaneWidth;
- const int kRootSize = (kBlendModesCount + 2) * kLaneWidth;
+ const int kLaneWidth = 2;
+ const int kLaneHeight = kLaneWidth;
+ const int kRootWidth = (kBlendModesCount + 2) * kLaneWidth;
+ const int kRootHeight = 2 * kLaneWidth + kLaneHeight;
scoped_refptr<SolidColorLayer> background =
- CreateSolidColorLayer(gfx::Rect(kRootSize, kRootSize), kCSSOrange);
+ CreateSolidColorLayer(gfx::Rect(kRootWidth, kRootHeight), kCSSOrange);
// Orange child layers have a background filter set and they will blend with
// the green background
@@ -377,60 +363,111 @@ TEST_F(LayerTreeHostBlendingPixelTest,
TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassColorMatrix_GL) {
RunBlendingWithRenderPass(PIXEL_TEST_GL,
- FILE_PATH_LITERAL("blending_render_pass_cm.png"),
+ FILE_PATH_LITERAL("blending_render_pass.png"),
kUseColorMatrix);
}
TEST_F(LayerTreeHostBlendingPixelTest,
BlendingWithRenderPassColorMatrix_Software) {
RunBlendingWithRenderPass(PIXEL_TEST_SOFTWARE,
- FILE_PATH_LITERAL("blending_render_pass_cm.png"),
+ FILE_PATH_LITERAL("blending_render_pass.png"),
kUseColorMatrix);
}
TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassColorMatrixAA_GL) {
RunBlendingWithRenderPass(PIXEL_TEST_GL,
- FILE_PATH_LITERAL("blending_render_pass_cm.png"),
+ FILE_PATH_LITERAL("blending_render_pass.png"),
kUseAntialiasing | kUseColorMatrix);
}
TEST_F(LayerTreeHostBlendingPixelTest,
BlendingWithRenderPassColorMatrixAA_Software) {
RunBlendingWithRenderPass(PIXEL_TEST_SOFTWARE,
- FILE_PATH_LITERAL("blending_render_pass_cm.png"),
+ FILE_PATH_LITERAL("blending_render_pass.png"),
kUseAntialiasing | kUseColorMatrix);
}
TEST_F(LayerTreeHostBlendingPixelTest,
BlendingWithRenderPassWithMaskColorMatrix_GL) {
- RunBlendingWithRenderPass(
- PIXEL_TEST_GL,
- FILE_PATH_LITERAL("blending_render_pass_mask_cm.png"),
- kUseMasks | kUseColorMatrix);
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kUseColorMatrix);
}
TEST_F(LayerTreeHostBlendingPixelTest,
BlendingWithRenderPassWithMaskColorMatrix_Software) {
- RunBlendingWithRenderPass(
- PIXEL_TEST_SOFTWARE,
- FILE_PATH_LITERAL("blending_render_pass_mask_cm.png"),
- kUseMasks | kUseColorMatrix);
+ RunBlendingWithRenderPass(PIXEL_TEST_SOFTWARE,
+ FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kUseColorMatrix);
}
TEST_F(LayerTreeHostBlendingPixelTest,
BlendingWithRenderPassWithMaskColorMatrixAA_GL) {
- RunBlendingWithRenderPass(
- PIXEL_TEST_GL,
- FILE_PATH_LITERAL("blending_render_pass_mask_cm.png"),
- kUseMasks | kUseAntialiasing | kUseColorMatrix);
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kUseAntialiasing | kUseColorMatrix);
}
TEST_F(LayerTreeHostBlendingPixelTest,
BlendingWithRenderPassWithMaskColorMatrixAA_Software) {
+ RunBlendingWithRenderPass(PIXEL_TEST_SOFTWARE,
+ FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kUseAntialiasing | kUseColorMatrix);
+}
+
+// Tests for render passes forcing shaders for all the blend modes.
+TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassShaders_GL) {
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass.png"),
+ kForceShaders);
+}
+
+TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassShadersAA_GL) {
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass.png"),
+ kUseAntialiasing | kForceShaders);
+}
+
+TEST_F(LayerTreeHostBlendingPixelTest,
+ BlendingWithRenderPassShadersWithMask_GL) {
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kForceShaders);
+}
+
+TEST_F(LayerTreeHostBlendingPixelTest,
+ BlendingWithRenderPassShadersWithMaskAA_GL) {
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kUseAntialiasing | kForceShaders);
+}
+
+TEST_F(LayerTreeHostBlendingPixelTest,
+ BlendingWithRenderPassShadersColorMatrix_GL) {
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass.png"),
+ kUseColorMatrix | kForceShaders);
+}
+
+TEST_F(LayerTreeHostBlendingPixelTest,
+ BlendingWithRenderPassShadersColorMatrixAA_GL) {
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass.png"),
+ kUseAntialiasing | kUseColorMatrix | kForceShaders);
+}
+
+TEST_F(LayerTreeHostBlendingPixelTest,
+ BlendingWithRenderPassShadersWithMaskColorMatrix_GL) {
+ RunBlendingWithRenderPass(PIXEL_TEST_GL,
+ FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kUseColorMatrix | kForceShaders);
+}
+
+TEST_F(LayerTreeHostBlendingPixelTest,
+ BlendingWithRenderPassShadersWithMaskColorMatrixAA_GL) {
RunBlendingWithRenderPass(
- PIXEL_TEST_SOFTWARE,
- FILE_PATH_LITERAL("blending_render_pass_mask_cm.png"),
- kUseMasks | kUseAntialiasing | kUseColorMatrix);
+ PIXEL_TEST_GL, FILE_PATH_LITERAL("blending_render_pass_mask.png"),
+ kUseMasks | kUseAntialiasing | kUseColorMatrix | kForceShaders);
}
} // namespace
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_pixeltest_filters.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698