| 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);
|
|
|