scrollRect.move(verticalScrollbarStart(0, m_box->width()), m_box->borderTop());
else
scrollRect.move(horizontalScrollbarStart(0), m_box->height() - m_box->borderBottom() - scrollbar->height());
+
+ if (scrollRect.isEmpty())
+ return;
+
LayoutRect repaintRect = scrollRect;
m_box->flipForWritingMode(repaintRect);
- m_box->repaintRectangle(repaintRect);
+
+ IntRect intRect = pixelSnappedIntRect(repaintRect);
+
+ if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && m_box->frameView()->isInPerformLayout()) {
+ if (scrollbar == m_vBar.get()) {
+ m_verticalBarDamage = intRect;
+ m_hasVerticalBarDamage = true;
+ } else {
+ m_horizontalBarDamage = intRect;
+ m_hasHorizontalBarDamage = true;
+ }
+
+ } else {
+ m_box->repaintRectangle(intRect);
+ }
}
void RenderLayerScrollableArea::invalidateScrollCornerRect(const IntRect& rect)
updateScrollableAreaSet(hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
- // Composited scrolling may need to be enabled or disabled if the amount of overflow changed.
- if (m_box->view() && m_box->view()->compositor()->updateLayerCompositingState(m_box->layer()))
- m_box->view()->compositor()->setCompositingLayersNeedRebuild();
+ {
+ // FIXME: We should not be allowing repaint during layout. crbug.com/336251
+ AllowRepaintScope scoper(m_box->view()->frameView());
+
+ // FIXME: Remove incremental compositing updates after fixing the chicken/egg issues
+ // https://code.google.com/p/chromium/issues/detail?id=343756
+ DisableCompositingQueryAsserts disabler;
+ m_box->view()->compositor()->updateLayerCompositingState(m_box->layer());
+ }
}
bool RenderLayerScrollableArea::hasHorizontalOverflow() const
if (m_box->style()->appearance() == ListboxPart)
return;
+ // RenderView shouldn't provide scrollbars on its own.
+ if (m_box->isRenderView())
+ return;
+
if (!m_scrollDimensionsDirty)
updateScrollableAreaSet(hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());