Chromium Code Reviews| Index: cc/quads/render_pass.cc |
| diff --git a/cc/quads/render_pass.cc b/cc/quads/render_pass.cc |
| index 567145a82d6d12565c6a835aef264d32ba94ab9c..4a7dc53a000e1c0a969641ccbaa8b3f658cb0027 100644 |
| --- a/cc/quads/render_pass.cc |
| +++ b/cc/quads/render_pass.cc |
| @@ -25,6 +25,7 @@ |
| #include "cc/quads/texture_draw_quad.h" |
| #include "cc/quads/tile_draw_quad.h" |
| #include "cc/quads/yuv_video_draw_quad.h" |
| +#include "ui/gfx/geometry/rect_conversions.h" |
| namespace { |
| const size_t kDefaultNumSharedQuadStatesToReserve = 32; |
| @@ -86,11 +87,8 @@ RenderPass::~RenderPass() { |
| scoped_ptr<RenderPass> RenderPass::Copy(RenderPassId new_id) const { |
| scoped_ptr<RenderPass> copy_pass( |
| Create(shared_quad_state_list.size(), quad_list.size())); |
| - copy_pass->SetAll(new_id, |
| - output_rect, |
| - damage_rect, |
| - transform_to_root_target, |
| - has_transparent_background); |
| + copy_pass->SetAll(new_id, output_rect, damage_rect, overlay_rect, |
| + transform_to_root_target, has_transparent_background); |
| return copy_pass.Pass(); |
| } |
| @@ -106,10 +104,8 @@ void RenderPass::CopyAll(const ScopedPtrVector<RenderPass>& in, |
| scoped_ptr<RenderPass> copy_pass(Create( |
| source->shared_quad_state_list.size(), source->quad_list.size())); |
| - copy_pass->SetAll(source->id, |
| - source->output_rect, |
| - source->damage_rect, |
| - source->transform_to_root_target, |
| + copy_pass->SetAll(source->id, source->output_rect, source->damage_rect, |
| + source->overlay_rect, source->transform_to_root_target, |
| source->has_transparent_background); |
| for (const auto& shared_quad_state : source->shared_quad_state_list) { |
| SharedQuadState* copy_shared_quad_state = |
| @@ -165,6 +161,7 @@ void RenderPass::SetNew(RenderPassId id, |
| void RenderPass::SetAll(RenderPassId id, |
| const gfx::Rect& output_rect, |
| const gfx::Rect& damage_rect, |
| + const gfx::Rect& overlay_rect, |
| const gfx::Transform& transform_to_root_target, |
| bool has_transparent_background) { |
| DCHECK_GT(id.layer_id, 0); |
| @@ -173,6 +170,7 @@ void RenderPass::SetAll(RenderPassId id, |
| this->id = id; |
| this->output_rect = output_rect; |
| this->damage_rect = damage_rect; |
| + this->overlay_rect = overlay_rect; |
| this->transform_to_root_target = transform_to_root_target; |
| this->has_transparent_background = has_transparent_background; |
| @@ -183,6 +181,7 @@ void RenderPass::SetAll(RenderPassId id, |
| void RenderPass::AsValueInto(base::trace_event::TracedValue* value) const { |
| MathUtil::AddToTracedValue("output_rect", output_rect, value); |
| MathUtil::AddToTracedValue("damage_rect", damage_rect, value); |
| + MathUtil::AddToTracedValue("overlay_rect", overlay_rect, value); |
| value->SetBoolean("has_transparent_background", has_transparent_background); |
| value->SetInteger("copy_requests", copy_requests.size()); |
| @@ -269,4 +268,25 @@ DrawQuad* RenderPass::CopyFromAndAppendDrawQuad( |
| return quad_list.back(); |
| } |
| +gfx::Rect RenderPass::GetFullDamageRect() { |
| + return gfx::UnionRects(damage_rect, overlay_rect); |
| +} |
| + |
| +void RenderPass::RecalculateOverlayDamage() { |
|
danakj
2015/04/03 22:10:17
I don't like us computing damage inside RenderPass
achaulk
2015/04/03 23:41:28
We would at least need to be able to do it after m
|
| + gfx::Rect new_rect; |
| + for (const auto* draw_quad : quad_list) { |
| + if (draw_quad->damaged) { |
| + gfx::RectF rect = gfx::RectF(draw_quad->visible_rect); |
| + draw_quad->quadTransform().TransformRect(&rect); |
| + new_rect.Union(gfx::ToEnclosingRect(rect)); |
| + } |
| + } |
| + overlay_rect = gfx::IntersectRects(output_rect, new_rect); |
| +} |
| + |
| +void RenderPass::UnionOverlayDamage() { |
| + damage_rect.Union(overlay_rect); |
|
danakj
2015/04/03 22:10:17
Not a fan of mutating RenderPass after constructio
achaulk
2015/04/07 18:53:00
I'll see how much of it I can put into the damage
|
| + overlay_rect = gfx::Rect(); |
| +} |
| + |
| } // namespace cc |