diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-07 18:12:18 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-07 18:12:18 +0000 |
commit | b4ead7bdfe512cee69862f8b79200b88d41d7317 (patch) | |
tree | 0d30671c758e273fcd79c9c52d68cf567411f389 /content/common | |
parent | 2056c3b91cd582ef0d4281f19d1e35215a4732ab (diff) | |
download | chromium_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 'content/common')
-rw-r--r-- | content/common/cc_messages.cc | 2 | ||||
-rw-r--r-- | content/common/cc_messages_unittest.cc | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc index 5279d4c..1e1e6df 100644 --- a/content/common/cc_messages.cc +++ b/content/common/cc_messages.cc @@ -402,7 +402,7 @@ bool ParamTraits<cc::RenderPass>::Read( const Message* m, PickleIterator* iter, param_type* p) { cc::RenderPass::Id id(-1, -1); gfx::Rect output_rect; - gfx::RectF damage_rect; + gfx::Rect damage_rect; gfx::Transform transform_to_root_target; bool has_transparent_background; size_t shared_quad_state_list_size; diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc index fb32ddf..89f510d 100644 --- a/content/common/cc_messages_unittest.cc +++ b/content/common/cc_messages_unittest.cc @@ -437,7 +437,7 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<RenderPass> pass_in = RenderPass::Create(); pass_in->SetAll(arbitrary_id, arbitrary_rect1, - arbitrary_rectf1, + arbitrary_rect2, arbitrary_matrix, arbitrary_bool1); @@ -458,7 +458,7 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<RenderPass> pass_cmp = RenderPass::Create(); pass_cmp->SetAll(arbitrary_id, arbitrary_rect1, - arbitrary_rectf1, + arbitrary_rect2, arbitrary_matrix, arbitrary_bool1); @@ -535,7 +535,7 @@ TEST_F(CCMessagesTest, UnusedSharedQuadStates) { scoped_ptr<RenderPass> pass_in = RenderPass::Create(); pass_in->SetAll(RenderPass::Id(1, 1), gfx::Rect(100, 100), - gfx::RectF(), + gfx::Rect(), gfx::Transform(), false); |