| Index: cc/trees/layer_tree_host_pixeltest_filters.cc
|
| diff --git a/cc/trees/layer_tree_host_pixeltest_filters.cc b/cc/trees/layer_tree_host_pixeltest_filters.cc
|
| index 37d2931dfa0e9cbf5173d45e597f261e6bb12d38..b633d76c0a2386e47c484dc1fc975e2c69d42f84 100644
|
| --- a/cc/trees/layer_tree_host_pixeltest_filters.cc
|
| +++ b/cc/trees/layer_tree_host_pixeltest_filters.cc
|
| @@ -2,7 +2,9 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "build/build_config.h"
|
| #include "cc/test/layer_tree_pixel_test.h"
|
| +#include "cc/test/pixel_comparator.h"
|
|
|
| #if !defined(OS_ANDROID)
|
|
|
| @@ -33,6 +35,84 @@ TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlur) {
|
| "background_filter_blur.png")));
|
| }
|
|
|
| +TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlurOutsets) {
|
| + scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer(
|
| + gfx::Rect(200, 200), SK_ColorWHITE);
|
| +
|
| + // The green border is outside the layer with background blur, but the
|
| + // background blur should use pixels from outside its layer borders, up to the
|
| + // radius of the blur effect. So the border should be blurred underneath the
|
| + // top layer causing the green to bleed under the transparent layer, but not
|
| + // in the 1px region between the transparent layer and the green border.
|
| + scoped_refptr<SolidColorLayer> green_border = CreateSolidColorLayerWithBorder(
|
| + gfx::Rect(1, 1, 198, 198), SK_ColorWHITE, 10, kCSSGreen);
|
| + scoped_refptr<SolidColorLayer> blur = CreateSolidColorLayer(
|
| + gfx::Rect(12, 12, 176, 176), SK_ColorTRANSPARENT);
|
| + background->AddChild(green_border);
|
| + background->AddChild(blur);
|
| +
|
| + WebKit::WebFilterOperations filters;
|
| + filters.append(WebKit::WebFilterOperation::createBlurFilter(5));
|
| + blur->SetBackgroundFilters(filters);
|
| +
|
| + RunPixelTest(background,
|
| + base::FilePath(FILE_PATH_LITERAL(
|
| + "background_filter_blur_outsets.png")));
|
| +}
|
| +
|
| +TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlurOffAxis) {
|
| + scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer(
|
| + gfx::Rect(200, 200), SK_ColorWHITE);
|
| +
|
| + // This verifies that the perspective of the clear layer (with black border)
|
| + // does not influence the blending of the green box behind it. Also verifies
|
| + // that the blur is correctly clipped inside the transformed clear layer.
|
| + scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer(
|
| + gfx::Rect(50, 50, 100, 100), kCSSGreen);
|
| + scoped_refptr<SolidColorLayer> blur = CreateSolidColorLayerWithBorder(
|
| + gfx::Rect(30, 30, 120, 120), SK_ColorTRANSPARENT, 1, SK_ColorBLACK);
|
| + background->AddChild(green);
|
| + background->AddChild(blur);
|
| +
|
| + background->SetPreserves3d(true);
|
| + gfx::Transform background_transform;
|
| + background_transform.ApplyPerspectiveDepth(200.0);
|
| + background->SetTransform(background_transform);
|
| +
|
| + blur->SetPreserves3d(true);
|
| + gfx::Transform blur_transform;
|
| + blur_transform.Translate(55.0, 65.0);
|
| + blur_transform.RotateAboutXAxis(85.0);
|
| + blur_transform.RotateAboutYAxis(180.0);
|
| + blur_transform.RotateAboutZAxis(20.0);
|
| + blur_transform.Translate(-60.0, -60.0);
|
| + blur->SetTransform(blur_transform);
|
| +
|
| + WebKit::WebFilterOperations filters;
|
| + filters.append(WebKit::WebFilterOperation::createBlurFilter(2));
|
| + blur->SetBackgroundFilters(filters);
|
| +
|
| +#if defined(OS_WIN)
|
| + // Windows has 4 pixels off by 1: crbug.com/225027
|
| + float percentage_pixels_large_error = 0.01f; // 4px / (200*200)
|
| + float percentage_pixels_small_error = 0.01f; // 4px / (200*200)
|
| + float average_error_allowed_in_bad_pixels = 1.f;
|
| + int large_error_allowed = 1;
|
| + int small_error_allowed = 1;
|
| + pixel_comparator_.reset(new FuzzyPixelComparator(
|
| + true, // discard_alpha
|
| + percentage_pixels_large_error,
|
| + percentage_pixels_small_error,
|
| + average_error_allowed_in_bad_pixels,
|
| + large_error_allowed,
|
| + small_error_allowed));
|
| +#endif
|
| +
|
| + RunPixelTest(background,
|
| + base::FilePath(FILE_PATH_LITERAL(
|
| + "background_filter_blur_off_axis.png")));
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|
|
|