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 971fc3751708df9b47b74ecd0047aeae3d86f29f..cee0cbb5a8afa07fbce5634155d47bcec165b66c 100644 |
--- a/cc/trees/layer_tree_host_pixeltest_filters.cc |
+++ b/cc/trees/layer_tree_host_pixeltest_filters.cc |
@@ -10,6 +10,7 @@ |
#include "cc/test/pixel_comparator.h" |
#include "third_party/skia/include/effects/SkColorFilterImageFilter.h" |
#include "third_party/skia/include/effects/SkColorMatrixFilter.h" |
+#include "third_party/skia/include/effects/SkOffsetImageFilter.h" |
#if !defined(OS_ANDROID) |
@@ -533,6 +534,59 @@ TEST_F(EnlargedTextureWithAlphaThresholdFilter, Software) { |
base::FilePath(FILE_PATH_LITERAL("enlarged_texture_on_threshold.png"))); |
} |
+class EnlargedTextureWithCropOffsetFilter |
+ : 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); |
+ |
+ FilterOperations filters; |
+ SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(10, 10, 80, 80)); |
+ skia::RefPtr<SkImageFilter> filter( |
+ skia::AdoptRef(SkOffsetImageFilter::Create(0, 0, nullptr, &cropRect))); |
+ filters.Append(FilterOperation::CreateReferenceFilter(filter)); |
+ 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(EnlargedTextureWithCropOffsetFilter, GL) { |
+ RunPixelTestType( |
+ PIXEL_TEST_GL, |
+ base::FilePath(FILE_PATH_LITERAL("enlarged_texture_on_crop_offset.png"))); |
+} |
+ |
+TEST_F(EnlargedTextureWithCropOffsetFilter, Software) { |
+ RunPixelTestType( |
+ PIXEL_TEST_SOFTWARE, |
+ base::FilePath(FILE_PATH_LITERAL("enlarged_texture_on_crop_offset.png"))); |
+} |
+ |
} // namespace |
} // namespace cc |