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 |
deleted file mode 100644 |
index dd3cf733144bbb033e56a8670b33d552c61dec02..0000000000000000000000000000000000000000 |
--- a/cc/trees/layer_tree_host_pixeltest_filters.cc |
+++ /dev/null |
@@ -1,457 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// 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/layers/solid_color_layer.h" |
-#include "cc/test/layer_tree_pixel_test.h" |
-#include "cc/test/pixel_comparator.h" |
-#include "third_party/skia/include/effects/SkColorFilterImageFilter.h" |
-#include "third_party/skia/include/effects/SkColorMatrixFilter.h" |
- |
-#if !defined(OS_ANDROID) |
- |
-namespace cc { |
-namespace { |
- |
-class LayerTreeHostFiltersPixelTest : public LayerTreePixelTest {}; |
- |
-TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlur) { |
- scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
- gfx::Rect(200, 200), SK_ColorWHITE); |
- |
- // The green box is entirely behind a layer with background blur, so it |
- // should appear blurred on its edges. |
- scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( |
- gfx::Rect(50, 50, 100, 100), kCSSGreen); |
- scoped_refptr<SolidColorLayer> blur = CreateSolidColorLayer( |
- gfx::Rect(30, 30, 140, 140), SK_ColorTRANSPARENT); |
- background->AddChild(green); |
- background->AddChild(blur); |
- |
- FilterOperations filters; |
- filters.Append(FilterOperation::CreateBlurFilter(2.f)); |
- blur->SetBackgroundFilters(filters); |
- |
-#if defined(OS_WIN) |
- // Windows has 436 pixels off by 1: crbug.com/259915 |
- float percentage_pixels_large_error = 1.09f; // 436px / (200*200) |
- float percentage_pixels_small_error = 0.0f; |
- float average_error_allowed_in_bad_pixels = 1.f; |
- int large_error_allowed = 1; |
- int small_error_allowed = 0; |
- 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(PIXEL_TEST_GL, |
- background, |
- base::FilePath(FILE_PATH_LITERAL("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); |
- |
- FilterOperations filters; |
- filters.Append(FilterOperation::CreateBlurFilter(5.f)); |
- blur->SetBackgroundFilters(filters); |
- |
-#if defined(OS_WIN) |
- // Windows has 2596 pixels off by at most 2: crbug.com/259922 |
- float percentage_pixels_large_error = 6.5f; // 2596px / (200*200), rounded up |
- float percentage_pixels_small_error = 0.0f; |
- float average_error_allowed_in_bad_pixels = 1.f; |
- int large_error_allowed = 2; |
- int small_error_allowed = 0; |
- 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( |
- PIXEL_TEST_GL, |
- 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_ColorTRANSPARENT); |
- |
- // 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->SetShouldFlattenTransform(false); |
- background->Set3dSortingContextId(1); |
- green->SetShouldFlattenTransform(false); |
- green->Set3dSortingContextId(1); |
- gfx::Transform background_transform; |
- background_transform.ApplyPerspectiveDepth(200.0); |
- background->SetTransform(background_transform); |
- |
- blur->SetShouldFlattenTransform(false); |
- blur->Set3dSortingContextId(1); |
- for (size_t i = 0; i < blur->children().size(); ++i) |
- blur->children()[i]->Set3dSortingContextId(1); |
- |
- 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); |
- |
- FilterOperations filters; |
- filters.Append(FilterOperation::CreateBlurFilter(2.f)); |
- blur->SetBackgroundFilters(filters); |
- |
-#if defined(OS_WIN) |
- // Windows has 116 pixels off by at most 2: crbug.com/225027 |
- float percentage_pixels_large_error = 0.3f; // 116px / (200*200), rounded up |
- float percentage_pixels_small_error = 0.0f; |
- float average_error_allowed_in_bad_pixels = 1.f; |
- int large_error_allowed = 2; |
- int small_error_allowed = 0; |
- 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( |
- PIXEL_TEST_GL, |
- background, |
- base::FilePath(FILE_PATH_LITERAL("background_filter_blur_off_axis.png"))); |
-} |
- |
-class LayerTreeHostFiltersScaledPixelTest |
- : public LayerTreeHostFiltersPixelTest { |
- void InitializeSettings(LayerTreeSettings* settings) override { |
- // Required so that device scale is inherited by content scale. |
- settings->layer_transforms_should_scale_layer_contents = true; |
- } |
- |
- void SetupTree() override { |
- layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_); |
- LayerTreePixelTest::SetupTree(); |
- } |
- |
- protected: |
- void RunPixelTestType(int content_size, |
- float device_scale_factor, |
- PixelTestType test_type) { |
- int half_content = content_size / 2; |
- |
- scoped_refptr<SolidColorLayer> root = CreateSolidColorLayer( |
- gfx::Rect(0, 0, content_size, content_size), SK_ColorWHITE); |
- |
- scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
- gfx::Rect(0, 0, content_size, content_size), SK_ColorGREEN); |
- root->AddChild(background); |
- |
- // Add a blue layer that completely covers the green layer. |
- scoped_refptr<SolidColorLayer> foreground = CreateSolidColorLayer( |
- gfx::Rect(0, 0, content_size, content_size), SK_ColorBLUE); |
- background->AddChild(foreground); |
- |
- // Add an alpha threshold filter to the blue layer which will filter out |
- // everything except the lower right corner. |
- FilterOperations filters; |
- SkRegion alpha_region; |
- alpha_region.setRect( |
- half_content, half_content, content_size, content_size); |
- filters.Append( |
- FilterOperation::CreateAlphaThresholdFilter(alpha_region, 1.f, 0.f)); |
- foreground->SetFilters(filters); |
- |
- device_scale_factor_ = device_scale_factor; |
- RunPixelTest( |
- test_type, |
- background, |
- base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); |
- } |
- |
- float device_scale_factor_; |
-}; |
- |
-TEST_F(LayerTreeHostFiltersScaledPixelTest, StandardDpi_GL) { |
- RunPixelTestType(100, 1.f, PIXEL_TEST_GL); |
-} |
- |
-TEST_F(LayerTreeHostFiltersScaledPixelTest, StandardDpi_Software) { |
- RunPixelTestType(100, 1.f, PIXEL_TEST_SOFTWARE); |
-} |
- |
-TEST_F(LayerTreeHostFiltersScaledPixelTest, HiDpi_GL) { |
- RunPixelTestType(50, 2.f, PIXEL_TEST_GL); |
-} |
- |
-TEST_F(LayerTreeHostFiltersScaledPixelTest, HiDpi_Software) { |
- RunPixelTestType(50, 2.f, PIXEL_TEST_SOFTWARE); |
-} |
- |
-class ImageFilterClippedPixelTest : public LayerTreeHostFiltersPixelTest { |
- protected: |
- void RunPixelTestType(PixelTestType test_type) { |
- scoped_refptr<SolidColorLayer> root = |
- CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); |
- |
- scoped_refptr<SolidColorLayer> background = |
- CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorYELLOW); |
- root->AddChild(background); |
- |
- scoped_refptr<SolidColorLayer> foreground = |
- CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorRED); |
- background->AddChild(foreground); |
- |
- SkScalar matrix[20]; |
- memset(matrix, 0, 20 * sizeof(matrix[0])); |
- // This filter does a red-blue swap, so the foreground becomes blue. |
- matrix[2] = matrix[6] = matrix[10] = matrix[18] = SK_Scalar1; |
- skia::RefPtr<SkColorFilter> colorFilter( |
- skia::AdoptRef(SkColorMatrixFilter::Create(matrix))); |
- // We filter only the bottom 200x100 pixels of the foreground. |
- SkImageFilter::CropRect crop_rect(SkRect::MakeXYWH(0, 100, 200, 100)); |
- skia::RefPtr<SkImageFilter> filter = skia::AdoptRef( |
- SkColorFilterImageFilter::Create(colorFilter.get(), NULL, &crop_rect)); |
- FilterOperations filters; |
- filters.Append(FilterOperation::CreateReferenceFilter(filter)); |
- |
- // Make the foreground layer's render surface be clipped by the background |
- // layer. |
- background->SetMasksToBounds(true); |
- foreground->SetFilters(filters); |
- |
- // Then we translate the foreground up by 100 pixels in Y, so the cropped |
- // region is moved to to the top. This ensures that the crop rect is being |
- // correctly transformed in skia by the amount of clipping that the |
- // compositor performs. |
- gfx::Transform transform; |
- transform.Translate(0.0, -100.0); |
- foreground->SetTransform(transform); |
- |
- RunPixelTest(test_type, |
- background, |
- base::FilePath(FILE_PATH_LITERAL("blue_yellow.png"))); |
- } |
-}; |
- |
-TEST_F(ImageFilterClippedPixelTest, ImageFilterClipped_GL) { |
- RunPixelTestType(PIXEL_TEST_GL); |
-} |
- |
-TEST_F(ImageFilterClippedPixelTest, ImageFilterClipped_Software) { |
- RunPixelTestType(PIXEL_TEST_SOFTWARE); |
-} |
- |
-TEST_F(LayerTreeHostFiltersPixelTest, ImageFilterScaled_GL) { |
- scoped_refptr<SolidColorLayer> background = |
- CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); |
- |
- gfx::Rect rect(50, 50, 100, 100); |
- |
- const int kInset = 3; |
- for (int i = 0; !rect.IsEmpty(); ++i) { |
- scoped_refptr<SolidColorLayer> layer = |
- CreateSolidColorLayer(rect, (i & 1) ? SK_ColorWHITE : SK_ColorRED); |
- |
- gfx::Transform transform; |
- transform.Translate(rect.width() / 2.0, rect.height() / 2.0); |
- transform.RotateAboutZAxis(30.0); |
- transform.Translate(-rect.width() / 2.0, -rect.height() / 2.0); |
- layer->SetTransform(transform); |
- |
- background->AddChild(layer); |
- |
- rect.Inset(kInset, kInset); |
- } |
- |
- scoped_refptr<SolidColorLayer> filter = |
- CreateSolidColorLayer(gfx::Rect(100, 0, 100, 200), SK_ColorTRANSPARENT); |
- |
- background->AddChild(filter); |
- |
- // Apply a scale to |background| so that we can see any scaling artifacts that |
- // may appear. |
- gfx::Transform background_transform; |
- static float scale = 1.1f; |
- background_transform.Scale(scale, scale); |
- background->SetTransform(background_transform); |
- |
- FilterOperations filters; |
- filters.Append(FilterOperation::CreateGrayscaleFilter(1.0f)); |
- filter->SetBackgroundFilters(filters); |
- |
-#if defined(OS_WIN) |
- // Windows has 153 pixels off by at most 2: crbug.com/225027 |
- float percentage_pixels_large_error = 0.3825f; // 153px / (200*200) |
- float percentage_pixels_small_error = 0.0f; |
- float average_error_allowed_in_bad_pixels = 1.f; |
- int large_error_allowed = 2; |
- int small_error_allowed = 0; |
- 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 |
- |
- // TODO(hendrikw): Enable test in software as well: crbug.com/432157 |
- RunPixelTest(PIXEL_TEST_GL, background, |
- base::FilePath(FILE_PATH_LITERAL("filter_on_scaled_layer.png"))); |
-} |
- |
-class ImageScaledRenderSurface : public LayerTreeHostFiltersPixelTest { |
- protected: |
- void RunPixelTestType(PixelTestType test_type, base::FilePath image_name) { |
- // A filter will cause a render surface to be used. Here we force the |
- // render surface on, and scale the result to make sure that we rasterize at |
- // the correct resolution. |
- scoped_refptr<SolidColorLayer> background = |
- CreateSolidColorLayer(gfx::Rect(300, 300), SK_ColorBLUE); |
- |
- scoped_refptr<SolidColorLayer> render_surface_layer = |
- CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); |
- |
- gfx::Rect rect(50, 50, 100, 100); |
- |
- scoped_refptr<SolidColorLayer> child = |
- CreateSolidColorLayer(rect, SK_ColorRED); |
- |
- gfx::Transform transform; |
- transform.Translate(rect.width() / 2.0, rect.height() / 2.0); |
- transform.RotateAboutZAxis(30.0); |
- transform.Translate(-rect.width() / 2.0, -rect.height() / 2.0); |
- child->SetTransform(transform); |
- |
- render_surface_layer->AddChild(child); |
- |
- gfx::Transform render_surface_transform; |
- render_surface_transform.Scale(1.5f, 1.5f); |
- render_surface_layer->SetTransform(render_surface_transform); |
- render_surface_layer->SetForceRenderSurface(true); |
- |
- background->AddChild(render_surface_layer); |
- |
- // Software has some huge differences in the AA'd pixels on the different |
- // trybots. See crbug.com/452198. |
- float percentage_pixels_large_error = 0.686f; |
- float percentage_pixels_small_error = 0.0f; |
- float average_error_allowed_in_bad_pixels = 16.f; |
- int large_error_allowed = 17; |
- int small_error_allowed = 0; |
- 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)); |
- |
- RunPixelTest(test_type, background, image_name); |
- } |
-}; |
- |
-TEST_F(ImageScaledRenderSurface, ImageRenderSurfaceScaled_GL) { |
- RunPixelTestType( |
- PIXEL_TEST_GL, |
- base::FilePath(FILE_PATH_LITERAL("scaled_render_surface_layer_gl.png"))); |
-} |
- |
-TEST_F(ImageScaledRenderSurface, ImageRenderSurfaceScaled_Software) { |
- RunPixelTestType( |
- PIXEL_TEST_SOFTWARE, |
- base::FilePath(FILE_PATH_LITERAL("scaled_render_surface_layer_sw.png"))); |
-} |
- |
-class EnlargedTextureWithAlphaThresholdFilter |
- : public LayerTreeHostFiltersPixelTest { |
- protected: |
- void RunPixelTestType(PixelTestType test_type, base::FilePath image_name) { |
- // Rectangles choosen so that if flipped, the test will fail. |
- gfx::Rect rect1(10, 10, 10, 15); |
- gfx::Rect rect2(20, 25, 70, 65); |
- |
- scoped_refptr<SolidColorLayer> child1 = |
- CreateSolidColorLayer(rect1, SK_ColorRED); |
- scoped_refptr<SolidColorLayer> child2 = |
- CreateSolidColorLayer(rect2, SK_ColorGREEN); |
- scoped_refptr<SolidColorLayer> background = |
- CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLUE); |
- scoped_refptr<SolidColorLayer> filter_layer = |
- CreateSolidColorLayer(gfx::Rect(100, 100), SK_ColorWHITE); |
- |
- // Make sure a transformation does not cause misregistration of the filter |
- // and source texture. |
- gfx::Transform filter_transform; |
- filter_transform.Scale(2.f, 2.f); |
- filter_layer->SetTransform(filter_transform); |
- filter_layer->AddChild(child1); |
- filter_layer->AddChild(child2); |
- |
- rect1.Inset(-5, -5); |
- rect2.Inset(-5, -5); |
- SkRegion alpha_region; |
- SkIRect rects[2] = {gfx::RectToSkIRect(rect1), gfx::RectToSkIRect(rect2)}; |
- alpha_region.setRects(rects, 2); |
- FilterOperations filters; |
- filters.Append( |
- FilterOperation::CreateAlphaThresholdFilter(alpha_region, 0.f, 0.f)); |
- filter_layer->SetFilters(filters); |
- |
- background->AddChild(filter_layer); |
- |
- // Force the allocation a larger textures. |
- set_enlarge_texture_amount(gfx::Vector2d(50, 50)); |
- |
- RunPixelTest(test_type, background, image_name); |
- } |
-}; |
- |
-TEST_F(EnlargedTextureWithAlphaThresholdFilter, GL) { |
- RunPixelTestType( |
- PIXEL_TEST_GL, |
- base::FilePath(FILE_PATH_LITERAL("enlarged_texture_on_threshold.png"))); |
-} |
- |
-TEST_F(EnlargedTextureWithAlphaThresholdFilter, Software) { |
- RunPixelTestType( |
- PIXEL_TEST_SOFTWARE, |
- base::FilePath(FILE_PATH_LITERAL("enlarged_texture_on_threshold.png"))); |
-} |
- |
-} // namespace |
-} // namespace cc |
- |
-#endif // OS_ANDROID |