Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(575)

Side by Side Diff: Source/core/rendering/RenderLayerRepainter.cpp

Issue 353403006: Consider subpixel accumulation when invalidating paint (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Also squashing path Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 } 70 }
71 71
72 // Since we're only painting non-composited layers, we know that they all share the same repaintContainer. 72 // Since we're only painting non-composited layers, we know that they all share the same repaintContainer.
73 void RenderLayerRepainter::repaintIncludingNonCompositingDescendants() 73 void RenderLayerRepainter::repaintIncludingNonCompositingDescendants()
74 { 74 {
75 repaintIncludingNonCompositingDescendantsInternal(m_renderer.containerForPai ntInvalidation()); 75 repaintIncludingNonCompositingDescendantsInternal(m_renderer.containerForPai ntInvalidation());
76 } 76 }
77 77
78 void RenderLayerRepainter::repaintIncludingNonCompositingDescendantsInternal(con st RenderLayerModelObject* repaintContainer) 78 void RenderLayerRepainter::repaintIncludingNonCompositingDescendantsInternal(con st RenderLayerModelObject* repaintContainer)
79 { 79 {
80 m_renderer.invalidatePaintUsingContainer(repaintContainer, pixelSnappedIntRe ct(m_renderer.boundsRectForPaintInvalidation(repaintContainer)), InvalidationLay er); 80 m_renderer.invalidatePaintUsingContainer(repaintContainer, m_renderer.bounds RectForPaintInvalidation(repaintContainer), InvalidationLayer);
81 81
82 // FIXME: Repaints can be issued during style recalc at present, via RenderL ayerModelObject::styleWillChange. This happens in scenarios when 82 // FIXME: Repaints can be issued during style recalc at present, via RenderL ayerModelObject::styleWillChange. This happens in scenarios when
83 // repaint is needed but not layout. 83 // repaint is needed but not layout.
84 DisableCompositingQueryAsserts disabler; 84 DisableCompositingQueryAsserts disabler;
85 85
86 for (RenderLayer* curr = m_renderer.layer()->firstChild(); curr; curr = curr ->nextSibling()) { 86 for (RenderLayer* curr = m_renderer.layer()->firstChild(); curr; curr = curr ->nextSibling()) {
87 if (curr->compositingState() != PaintsIntoOwnBacking && curr->compositin gState() != PaintsIntoGroupedBacking) 87 if (curr->compositingState() != PaintsIntoOwnBacking && curr->compositin gState() != PaintsIntoGroupedBacking)
88 curr->repainter().repaintIncludingNonCompositingDescendantsInternal( repaintContainer); 88 curr->repainter().repaintIncludingNonCompositingDescendantsInternal( repaintContainer);
89 } 89 }
90 } 90 }
(...skipping 26 matching lines...) Expand all
117 absRect.moveBy(delta); 117 absRect.moveBy(delta);
118 118
119 if (absRect.isEmpty()) 119 if (absRect.isEmpty())
120 return; 120 return;
121 121
122 RenderView* view = m_renderer.view(); 122 RenderView* view = m_renderer.view();
123 if (view) 123 if (view)
124 view->repaintViewRectangle(absRect); 124 view->repaintViewRectangle(absRect);
125 return; 125 return;
126 } 126 }
127 IntRect repaintRect = pixelSnappedIntRect(r);
128 // FIXME: generalize accessors to backing GraphicsLayers so that this code i s squasphing-agnostic. 127 // FIXME: generalize accessors to backing GraphicsLayers so that this code i s squasphing-agnostic.
129 if (m_renderer.layer()->groupedMapping()) { 128 if (m_renderer.layer()->groupedMapping()) {
129 LayoutRect repaintRect = r;
130 repaintRect.move(m_renderer.layer()->subpixelAccumulation());
130 if (GraphicsLayer* squashingLayer = m_renderer.layer()->groupedMapping() ->squashingLayer()) 131 if (GraphicsLayer* squashingLayer = m_renderer.layer()->groupedMapping() ->squashingLayer())
131 squashingLayer->setNeedsDisplayInRect(repaintRect); 132 squashingLayer->setNeedsDisplayInRect(pixelSnappedIntRect(repaintRec t));
132 } else { 133 } else {
133 m_renderer.layer()->compositedLayerMapping()->setContentsNeedDisplayInRe ct(repaintRect); 134 m_renderer.layer()->compositedLayerMapping()->setContentsNeedDisplayInRe ct(r);
134 } 135 }
135 } 136 }
136 137
137 void RenderLayerRepainter::setFilterBackendNeedsRepaintingInRect(const LayoutRec t& rect) 138 void RenderLayerRepainter::setFilterBackendNeedsRepaintingInRect(const LayoutRec t& rect)
138 { 139 {
139 if (rect.isEmpty()) 140 if (rect.isEmpty())
140 return; 141 return;
141 LayoutRect rectForRepaint = rect; 142 LayoutRect rectForRepaint = rect;
142 m_renderer.style()->filterOutsets().expandRect(rectForRepaint); 143 m_renderer.style()->filterOutsets().expandRect(rectForRepaint);
143 144
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 RenderLayer* RenderLayerRepainter::enclosingFilterRepaintLayer() const 176 RenderLayer* RenderLayerRepainter::enclosingFilterRepaintLayer() const
176 { 177 {
177 for (const RenderLayer* curr = m_renderer.layer(); curr; curr = curr->parent ()) { 178 for (const RenderLayer* curr = m_renderer.layer(); curr; curr = curr->parent ()) {
178 if ((curr != m_renderer.layer() && curr->requiresFullLayerImageForFilter s()) || curr->compositingState() == PaintsIntoOwnBacking || curr->isRootLayer()) 179 if ((curr != m_renderer.layer() && curr->requiresFullLayerImageForFilter s()) || curr->compositingState() == PaintsIntoOwnBacking || curr->isRootLayer())
179 return const_cast<RenderLayer*>(curr); 180 return const_cast<RenderLayer*>(curr);
180 } 181 }
181 return 0; 182 return 0;
182 } 183 }
183 184
184 } // Namespace WebCore 185 } // Namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698