Commit 5703cf75 authored by Mason Freed's avatar Mason Freed Committed by Commit Bot

Fix a bug in software renderer for backdrop filters

Prior to this CL, an invalid color filter would cause a renderer crash
in software_renderer. This is now fixed.

Bug: 1004054
Change-Id: I0182b1dd475d2aab909611aa9a01351863e0632d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1819960
Commit-Queue: Mason Freed <masonfreed@chromium.org>
Auto-Submit: Mason Freed <masonfreed@chromium.org>
Reviewed-by: default avatarvmpstr <vmpstr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699448}
parent 8a21035a
...@@ -138,6 +138,26 @@ TEST_P(LayerTreeHostFiltersPixelTest, BackdropFilterBlurRect) { ...@@ -138,6 +138,26 @@ TEST_P(LayerTreeHostFiltersPixelTest, BackdropFilterBlurRect) {
: base::FilePath(FILE_PATH_LITERAL("backdrop_filter_blur.png"))); : base::FilePath(FILE_PATH_LITERAL("backdrop_filter_blur.png")));
} }
TEST_P(LayerTreeHostFiltersPixelTest, BackdropFilterInvalid) {
scoped_refptr<SolidColorLayer> background =
CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
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);
// This should be an invalid filter, and result in just the original green.
FilterOperations filters;
filters.Append(FilterOperation::CreateHueRotateFilter(9e99));
blur->SetBackdropFilters(filters);
RunPixelTest(
renderer_type(), background,
base::FilePath(FILE_PATH_LITERAL("backdrop_filter_invalid.png")));
}
TEST_P(LayerTreeHostFiltersPixelTest, BackdropFilterBlurRadius) { TEST_P(LayerTreeHostFiltersPixelTest, BackdropFilterBlurRadius) {
if (renderer_type() == RENDERER_SOFTWARE) { if (renderer_type() == RENDERER_SOFTWARE) {
// TODO(989238): Software renderer does not support/implement // TODO(989238): Software renderer does not support/implement
......
...@@ -812,12 +812,14 @@ sk_sp<SkShader> SoftwareRenderer::GetBackdropFilterShader( ...@@ -812,12 +812,14 @@ sk_sp<SkShader> SoftwareRenderer::GetBackdropFilterShader(
(unclipped_rect.top_right() - backdrop_rect.top_right()) + (unclipped_rect.top_right() - backdrop_rect.top_right()) +
(backdrop_rect.bottom_left() - unclipped_rect.bottom_left()); (backdrop_rect.bottom_left() - unclipped_rect.bottom_left());
sk_sp<SkImageFilter> filter = sk_sp<cc::PaintFilter> paint_filter =
cc::RenderSurfaceFilters::BuildImageFilter( cc::RenderSurfaceFilters::BuildImageFilter(
*backdrop_filters, *backdrop_filters,
gfx::SizeF(backdrop_bitmap.width(), backdrop_bitmap.height()), gfx::SizeF(backdrop_bitmap.width(), backdrop_bitmap.height()),
clipping_offset) clipping_offset);
->cached_sk_filter_; if (!paint_filter)
return nullptr;
sk_sp<SkImageFilter> filter = paint_filter->cached_sk_filter_;
// TODO(989238): Software renderer does not support/implement kClamp_TileMode. // TODO(989238): Software renderer does not support/implement kClamp_TileMode.
SkIRect result_rect; SkIRect result_rect;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment