Index: cc/trees/damage_tracker.cc |
diff --git a/cc/trees/damage_tracker.cc b/cc/trees/damage_tracker.cc |
index 235dfcfd7ef6ea316a244b31122314dfacdf2ed3..4b665541223b80f604f39496c0bc1b73e22e48da 100644 |
--- a/cc/trees/damage_tracker.cc |
+++ b/cc/trees/damage_tracker.cc |
@@ -125,8 +125,10 @@ void DamageTracker::UpdateDamageTrackingState( |
// These functions cannot be bypassed with early-exits, even if we know what |
// the damage will be for this frame, because we need to update the damage |
// tracker state to correctly track the next frame. |
- gfx::Rect damage_from_active_layers = |
- TrackDamageFromActiveLayers(layer_list, target_surface_layer_id); |
+ gfx::Rect damage_from_active_layers; |
+ TrackDamageFromActiveLayers(layer_list, target_surface_layer_id, |
+ &damage_from_active_layers, |
+ ¤t_overlay_rect_); |
gfx::Rect damage_from_surface_mask = |
TrackDamageFromSurfaceMask(target_surface_mask_layer); |
gfx::Rect damage_from_leftover_rects = TrackDamageFromLeftoverRects(); |
@@ -173,9 +175,10 @@ DamageTracker::RectMapData& DamageTracker::RectDataForLayer( |
return *it; |
} |
-gfx::Rect DamageTracker::TrackDamageFromActiveLayers( |
- const LayerImplList& layer_list, |
- int target_surface_layer_id) { |
+void DamageTracker::TrackDamageFromActiveLayers(const LayerImplList& layer_list, |
+ int target_surface_layer_id, |
+ gfx::Rect* damage, |
+ gfx::Rect* overlay) { |
gfx::Rect damage_rect; |
for (size_t layer_index = 0; layer_index < layer_list.size(); ++layer_index) { |
@@ -189,12 +192,10 @@ gfx::Rect DamageTracker::TrackDamageFromActiveLayers( |
continue; |
if (LayerTreeHostCommon::RenderSurfaceContributesToTarget<LayerImpl>( |
layer, target_surface_layer_id)) |
- ExtendDamageForRenderSurface(layer, &damage_rect); |
+ ExtendDamageForRenderSurface(layer, damage); |
else |
- ExtendDamageForLayer(layer, &damage_rect); |
+ ExtendDamageForLayer(layer, damage, overlay); |
} |
- |
- return damage_rect; |
} |
gfx::Rect DamageTracker::TrackDamageFromSurfaceMask( |
@@ -260,7 +261,8 @@ gfx::Rect DamageTracker::TrackDamageFromLeftoverRects() { |
} |
void DamageTracker::ExtendDamageForLayer(LayerImpl* layer, |
- gfx::Rect* target_damage_rect) { |
+ gfx::Rect* target_damage_rect, |
+ gfx::Rect* target_overlay_rect) { |
// There are two ways that a layer can damage a region of the target surface: |
// 1. Property change (e.g. opacity, position, transforms): |
// - the entire region of the layer itself damages the surface. |
@@ -289,7 +291,9 @@ void DamageTracker::ExtendDamageForLayer(LayerImpl* layer, |
gfx::RectF damage_rect = |
gfx::UnionRects(layer->update_rect(), layer->damage_rect()); |
- if (layer_is_new || layer->LayerPropertyChanged()) { |
+ if (!layer->overlay_update_rect().IsEmpty()) { |
+ target_overlay_rect->Union(layer->overlay_update_rect()); |
+ } else if (layer_is_new || layer->LayerPropertyChanged()) { |
// If a layer is new or has changed, then its entire layer rect affects the |
// target surface. |
target_damage_rect->Union(rect_in_target_space); |