Index: cc/output/overlay_strategy_single_on_top.cc |
diff --git a/cc/output/overlay_strategy_single_on_top.cc b/cc/output/overlay_strategy_single_on_top.cc |
index ca254b2b8f31f402727c1b01927f8abc2afda803..7a35d1d94506d7d6a81b214aa86ebddd40e14cfd 100644 |
--- a/cc/output/overlay_strategy_single_on_top.cc |
+++ b/cc/output/overlay_strategy_single_on_top.cc |
@@ -7,6 +7,7 @@ |
#include "cc/base/math_util.h" |
#include "cc/output/overlay_candidate_validator.h" |
#include "cc/quads/draw_quad.h" |
+#include "ui/gfx/geometry/rect_conversions.h" |
namespace cc { |
@@ -20,12 +21,13 @@ OverlayStrategySingleOnTop::~OverlayStrategySingleOnTop() {} |
bool OverlayStrategySingleOnTop::Attempt(ResourceProvider* resource_provider, |
RenderPassList* render_passes, |
- OverlayCandidateList* candidate_list) { |
+ OverlayCandidateList* candidate_list, |
+ gfx::Rect* damage_rect) { |
QuadList* quad_list = &render_passes->back()->quad_list; |
for (auto it = quad_list->begin(); it != quad_list->end(); ++it) { |
OverlayCandidate candidate; |
if (OverlayCandidate::FromDrawQuad(resource_provider, *it, &candidate) && |
- TryOverlay(quad_list, candidate_list, candidate, it)) { |
+ TryOverlay(quad_list, candidate_list, candidate, it, damage_rect)) { |
return true; |
} |
} |
@@ -37,7 +39,8 @@ bool OverlayStrategySingleOnTop::TryOverlay( |
QuadList* quad_list, |
OverlayCandidateList* candidate_list, |
const OverlayCandidate& candidate, |
- QuadList::Iterator candidate_iterator) { |
+ QuadList::Iterator candidate_iterator, |
+ gfx::Rect* damage_rect) { |
// Check that no prior quads overlap it. |
for (auto overlap_iter = quad_list->cbegin(); |
overlap_iter != candidate_iterator; ++overlap_iter) { |
@@ -57,10 +60,12 @@ bool OverlayStrategySingleOnTop::TryOverlay( |
// Check for support. |
capability_checker_->CheckOverlaySupport(&new_candidate_list); |
+ const OverlayCandidate& overlay_candidate = new_candidate_list.back(); |
// If the candidate can be handled by an overlay, create a pass for it. |
- if (new_candidate_list.back().overlay_handled) { |
+ if (overlay_candidate.overlay_handled) { |
quad_list->EraseAndInvalidateAllPointers(candidate_iterator); |
candidate_list->swap(new_candidate_list); |
+ damage_rect->Subtract(ToEnclosedRect(overlay_candidate.display_rect)); |
return true; |
} |