summaryrefslogtreecommitdiffstats
path: root/cc/layers/render_surface_impl.cc
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 18:12:18 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 18:12:18 +0000
commitb4ead7bdfe512cee69862f8b79200b88d41d7317 (patch)
tree0d30671c758e273fcd79c9c52d68cf567411f389 /cc/layers/render_surface_impl.cc
parent2056c3b91cd582ef0d4281f19d1e35215a4732ab (diff)
downloadchromium_src-b4ead7bdfe512cee69862f8b79200b88d41d7317.zip
chromium_src-b4ead7bdfe512cee69862f8b79200b88d41d7317.tar.gz
chromium_src-b4ead7bdfe512cee69862f8b79200b88d41d7317.tar.bz2
cc: Change damage tracking from floats to integers.
Damage rects can become huge when layers clip the viewport, and in some cases become so large that we reach inaccurate floating point representation of the whole-number portion, which we fail to handle correctly when doing gfx::ToEnclosingRect. Int/float conversions are also slow, and the GL_SCISSOR wants integers eventually anyway, so keeping track of partial-pixel damage is not buying us much here. So convert the DamageTracker to use integer rects. Also change cc::RenderSurfaceImpl to export a damage_rect that is contained inside the output_rect for the RenderPass, and add DCHECKs to cc::RenderPass to ensure we don't send pointlessly large damage_rects to the cc::Renderer. Tests: DamageTrackerTest.HugeDamageRect R=enne@chromium.org, piman@chromium.org BUG=355514 Review URL: https://codereview.chromium.org/226183007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262160 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/layers/render_surface_impl.cc')
-rw-r--r--cc/layers/render_surface_impl.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc
index ddb7158..fa7dcb8 100644
--- a/cc/layers/render_surface_impl.cc
+++ b/cc/layers/render_surface_impl.cc
@@ -130,7 +130,8 @@ void RenderSurfaceImpl::AppendRenderPasses(RenderPassSink* pass_sink) {
scoped_ptr<RenderPass> pass = RenderPass::Create(layer_list_.size());
pass->SetNew(RenderPassId(),
content_rect_,
- damage_tracker_->current_damage_rect(),
+ gfx::IntersectRects(content_rect_,
+ damage_tracker_->current_damage_rect()),
screen_space_transform_);
pass_sink->AppendRenderPass(pass.Pass());
}