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

Unified Diff: Source/core/rendering/RenderLazyBlock.cpp

Issue 23072015: Get rid of lazy block. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderLazyBlock.h ('k') | Source/core/rendering/RenderObject.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderLazyBlock.cpp
diff --git a/Source/core/rendering/RenderLazyBlock.cpp b/Source/core/rendering/RenderLazyBlock.cpp
deleted file mode 100644
index a43ab5475493b916d7e74113b39b048376fe7565..0000000000000000000000000000000000000000
--- a/Source/core/rendering/RenderLazyBlock.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/rendering/RenderLazyBlock.h"
-
-#include "core/rendering/LayoutRepainter.h"
-#include "core/rendering/RenderLayer.h"
-#include "core/rendering/RenderView.h"
-
-namespace WebCore {
-
-RenderLazyBlock::RenderLazyBlock(Element* element)
- : RenderBlock(element)
- , m_next(0)
- , m_previous(0)
- , m_firstVisibleChildBox(0)
- , m_lastVisibleChildBox(0)
- , m_attached(false)
- , m_isNestedLayout(false)
-{
- setChildrenInline(false); // All of our children must be block-level.
-}
-
-RenderLazyBlock::~RenderLazyBlock()
-{
- ASSERT(!m_attached);
-}
-
-void RenderLazyBlock::willBeDestroyed()
-{
- detachLazyBlock();
- RenderBlock::willBeDestroyed();
-}
-
-void RenderLazyBlock::willBeRemovedFromTree()
-{
- RenderBlock::willBeRemovedFromTree();
- detachLazyBlock();
-}
-
-bool RenderLazyBlock::isNested() const
-{
- for (RenderObject* ancestor = parent(); ancestor; ancestor = ancestor->parent()) {
- if (ancestor->isRenderLazyBlock())
- return true;
- }
- return false;
-}
-
-// FIXME: This method and detachLazyBlock are essentially identical to
-// RenderQuote::attachQuote and detachQuote. We should just have a
-// RenderTreeOrderedList that does this stuff internally.
-void RenderLazyBlock::attachLazyBlock()
-{
- ASSERT(view());
- ASSERT(!m_attached);
- ASSERT(!m_next && !m_previous);
- ASSERT(isRooted());
-
- if (!view()->firstLazyBlock()) {
- view()->setFirstLazyBlock(this);
- m_attached = true;
- return;
- }
-
- for (RenderObject* predecessor = previousInPreOrder(); predecessor; predecessor = predecessor->previousInPreOrder()) {
- if (!predecessor->isRenderLazyBlock() || !toRenderLazyBlock(predecessor)->isAttached())
- continue;
- m_previous = toRenderLazyBlock(predecessor);
- m_next = m_previous->m_next;
- m_previous->m_next = this;
- if (m_next)
- m_next->m_previous = this;
- break;
- }
-
- if (!m_previous) {
- m_next = view()->firstLazyBlock();
- view()->setFirstLazyBlock(this);
- if (m_next)
- m_next->m_previous = this;
- }
- m_attached = true;
-
- ASSERT(!m_next || m_next->m_attached);
- ASSERT(!m_next || m_next->m_previous == this);
- ASSERT(!m_previous || m_previous->m_attached);
- ASSERT(!m_previous || m_previous->m_next == this);
-}
-
-void RenderLazyBlock::detachLazyBlock()
-{
- ASSERT(!m_next || m_next->m_attached);
- ASSERT(!m_previous || m_previous->m_attached);
- if (!m_attached)
- return;
- if (m_previous)
- m_previous->m_next = m_next;
- else if (view())
- view()->setFirstLazyBlock(m_next);
- if (m_next)
- m_next->m_previous = m_previous;
- m_attached = false;
- m_next = 0;
- m_previous = 0;
-}
-
-void RenderLazyBlock::paintChildren(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
-{
- for (RenderBox* child = m_firstVisibleChildBox; child && child != m_lastVisibleChildBox; child = child->nextSiblingBox())
- paintChild(child, paintInfo, paintOffset);
-}
-
-void RenderLazyBlock::layoutChildren(bool relayoutChildren)
-{
- LayoutUnit afterEdge = borderAfter() + paddingAfter() + scrollbarLogicalHeight();
- LayoutUnit height = borderBefore() + paddingBefore();
- LayoutRect intersectRect = m_intersectRect;
-
- // FIXME: If we already have m_firstVisibleChildBox we should start there
- // and stop when we have enough to fill the viewport. This catches the most
- // common cases of scrolling upward or downward.
-
- m_firstVisibleChildBox = 0;
- m_lastVisibleChildBox = 0;
-
- // FIXME: This should approximate the height so we don't actually need to walk
- // every child and can optimistically layout children until we fill the
- // the expandedViewportRect.
-
- setLogicalHeight(height);
- int childCount = 0;
- LayoutUnit heightOfChildren = 0;
- for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
- ++childCount;
- updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, child);
-
- if (relayoutChildren)
- child->setNeedsLayout(MarkOnlyThis);
-
- if (child->style()->logicalHeight().isSpecified()) {
- LogicalExtentComputedValues computedValues;
- child->computeLogicalHeight(-1, height, computedValues);
- child->setLogicalHeight(computedValues.m_extent);
- heightOfChildren += computedValues.m_extent;
- } else {
- // FIXME: Enable guessing about height so we don't need to do layout
- // on every non fixed height child.
- setLogicalHeight(height);
- setLogicalTopForChild(child, height);
- if (heightOfChildren && child->needsLayout())
- child->setLogicalHeight(heightOfChildren / childCount);
- else
- child->layoutIfNeeded();
- heightOfChildren += child->logicalHeight();
- }
-
- intersectRect.setHeight(child->logicalHeight());
-
- if (m_expandedViewportRect.intersects(enclosingIntRect(intersectRect))) {
- if (!m_firstVisibleChildBox)
- m_firstVisibleChildBox = child;
- m_lastVisibleChildBox = child->nextSiblingBox();
- setLogicalHeight(height);
- setLogicalTopForChild(child, height);
- child->layoutIfNeeded();
- // FIXME: Track how far off our estimated height is from the actual height,
- // and adjust the scrollbars accordingly.
- }
-
- intersectRect.setY(intersectRect.y() + child->logicalHeight());
- height += child->logicalHeight();
- }
-
- setLogicalHeight(height + afterEdge);
-
- updateLogicalHeight();
-}
-
-void RenderLazyBlock::layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight)
-{
- ASSERT(needsLayout());
-
- if (!m_attached)
- attachLazyBlock();
-
- // FIXME: We should adjust the style to disallow columns too.
- ASSERT(!hasColumns());
-
- LayoutRepainter repainter(*this, checkForRepaintDuringLayout());
- LayoutStateMaintainer statePusher(view(), this, locationOffset(), hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode());
-
- // FIXME: The compositor can instead give us a list of rects it thinks
- // are important.
- IntRect expandedViewportRect = view()->frameView()->visibleContentRect(ScrollableArea::IncludeScrollbars);
- expandedViewportRect.move(-4000, -4000);
- expandedViewportRect.expand(8000, 8000);
-
- // FIXME: We probably want a RenderGeometryMap instead since we need to handle
- // rotation of the RenderLazyBlock and other transforms.
- Vector<FloatQuad> quads;
- enclosingBoxModelObject()->absoluteQuads(quads);
- LayoutRect intersectRect = quads[0].enclosingBoundingBox();
- if (hasOverflowClip())
- intersectRect.move(-scrolledContentOffset());
-
- // Avoid doing work inside the nested layout if we know everything is correct already.
- if (!m_isNestedLayout || m_intersectRect != intersectRect || m_expandedViewportRect != expandedViewportRect) {
- m_intersectRect = intersectRect;
- m_expandedViewportRect = expandedViewportRect;
- layoutChildren(relayoutChildren || updateLogicalWidthAndColumnWidth());
- }
-
- statePusher.pop();
- updateLayerTransform();
- updateScrollInfoAfterLayout();
- repainter.repaintAfterLayout();
-
- m_isNestedLayout = false;
- clearNeedsLayout();
-}
-
-} // namespace WebCore
« no previous file with comments | « Source/core/rendering/RenderLazyBlock.h ('k') | Source/core/rendering/RenderObject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698