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

Unified Diff: cc/trees/property_tree_builder.cc

Issue 2423483003: cc: Make visible rect computation aware of pixel-moving filters (Closed)
Patch Set: Rebase Created 4 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
Index: cc/trees/property_tree_builder.cc
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
index b672b556fdc68ca392cc80e4db1490d0f2f8c3a5..43a1c85d84cecf950bb3cd9a525a9b5b525ee354 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -9,6 +9,7 @@
#include <map>
#include <set>
+#include "base/memory/ptr_util.h"
#include "cc/animation/animation_host.h"
#include "cc/animation/mutable_properties.h"
#include "cc/base/math_util.h"
@@ -225,6 +226,14 @@ static size_t NumUnclippedDescendants(LayerImpl* layer) {
return layer->test_properties()->num_unclipped_descendants;
}
+static inline const FilterOperations& Filters(Layer* layer) {
+ return layer->filters();
+}
+
+static inline const FilterOperations& Filters(LayerImpl* layer) {
+ return layer->test_properties()->filters;
+}
+
static Layer* MaskLayer(Layer* layer) {
return layer->mask_layer();
}
@@ -429,10 +438,15 @@ void AddClipNodeIfNeeded(const DataForRecursion<LayerType>& data_from_ancestor,
node.layer_clipping_uses_only_local_clip = false;
}
- if (layer_clips_subtree)
+ if (layer_clips_subtree) {
node.clip_type = ClipNode::ClipType::APPLIES_LOCAL_CLIP;
- else
+ } else if (Filters(layer).HasFilterThatMovesPixels()) {
+ node.clip_type = ClipNode::ClipType::EXPANDS_CLIP;
+ node.clip_expander = base::MakeUnique<ClipExpander>(
+ ClipExpander::ExpanderType::FILTER, layer->effect_tree_index());
+ } else {
node.clip_type = ClipNode::ClipType::NONE;
+ }
node.resets_clip = has_unclipped_surface;
node.target_is_clipped = data_for_children->target_is_clipped;
node.layers_are_clipped = layers_are_clipped;
@@ -810,10 +824,6 @@ static inline SkXfermode::Mode BlendMode(LayerImpl* layer) {
return layer->test_properties()->blend_mode;
}
-static inline const FilterOperations& Filters(Layer* layer) {
- return layer->filters();
-}
-
static inline const gfx::PointF FiltersOrigin(Layer* layer) {
return layer->filters_origin();
}
@@ -822,10 +832,6 @@ static inline const gfx::PointF FiltersOrigin(LayerImpl* layer) {
return layer->test_properties()->filters_origin;
}
-static inline const FilterOperations& Filters(LayerImpl* layer) {
- return layer->test_properties()->filters;
-}
-
static inline const FilterOperations& BackgroundFilters(Layer* layer) {
return layer->background_filters();
}

Powered by Google App Engine
This is Rietveld 408576698