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

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

Issue 335963002: Change LayoutState to be stack-allocated (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix push function to match old behavior... Created 6 years, 6 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 RenderView::RenderView(Document* document) 50 RenderView::RenderView(Document* document)
51 : RenderBlockFlow(document) 51 : RenderBlockFlow(document)
52 , m_frameView(document->view()) 52 , m_frameView(document->view())
53 , m_selectionStart(0) 53 , m_selectionStart(0)
54 , m_selectionEnd(0) 54 , m_selectionEnd(0)
55 , m_selectionStartPos(-1) 55 , m_selectionStartPos(-1)
56 , m_selectionEndPos(-1) 56 , m_selectionEndPos(-1)
57 , m_pageLogicalHeight(0) 57 , m_pageLogicalHeight(0)
58 , m_pageLogicalHeightChanged(false) 58 , m_pageLogicalHeightChanged(false)
59 , m_layoutState(0) 59 , m_layoutState(0)
60 , m_layoutStateDisableCount(0)
61 , m_renderQuoteHead(0) 60 , m_renderQuoteHead(0)
62 , m_renderCounterCount(0) 61 , m_renderCounterCount(0)
63 { 62 {
64 // init RenderObject attributes 63 // init RenderObject attributes
65 setInline(false); 64 setInline(false);
66 65
67 m_minPreferredLogicalWidth = 0; 66 m_minPreferredLogicalWidth = 0;
68 m_maxPreferredLogicalWidth = 0; 67 m_maxPreferredLogicalWidth = 0;
69 68
70 setPreferredLogicalWidthsDirty(MarkOnlyThis); 69 setPreferredLogicalWidthsDirty(MarkOnlyThis);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 checkLayoutState(); 175 checkLayoutState();
177 #endif 176 #endif
178 } 177 }
179 178
180 #ifndef NDEBUG 179 #ifndef NDEBUG
181 void RenderView::checkLayoutState() 180 void RenderView::checkLayoutState()
182 { 181 {
183 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) { 182 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) {
184 ASSERT(layoutDeltaMatches(LayoutSize())); 183 ASSERT(layoutDeltaMatches(LayoutSize()));
185 } 184 }
186 ASSERT(!m_layoutStateDisableCount);
187 ASSERT(!m_layoutState->next()); 185 ASSERT(!m_layoutState->next());
188 } 186 }
189 #endif 187 #endif
190 188
191 bool RenderView::shouldDoFullRepaintForNextLayout() const 189 bool RenderView::shouldDoFullRepaintForNextLayout() const
192 { 190 {
193 // It's hard to predict here which of full repaint or per-descendant repaint costs less. 191 // It's hard to predict here which of full repaint or per-descendant repaint costs less.
194 // For vertical writing mode or width change it's more likely that per-desce ndant repaint 192 // For vertical writing mode or width change it's more likely that per-desce ndant repaint
195 // eventually turns out to be full repaint but with the cost to handle more layout states 193 // eventually turns out to be full repaint but with the cost to handle more layout states
196 // and discrete repaint rects, so marking full repaint here is more likely t o cost less. 194 // and discrete repaint rects, so marking full repaint here is more likely t o cost less.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 } 243 }
246 244
247 if (document().svgExtensions()) 245 if (document().svgExtensions())
248 document().accessSVGExtensions().invalidateSVGRootsWithRelativeLengt hDescendents(&layoutScope); 246 document().accessSVGExtensions().invalidateSVGRootsWithRelativeLengt hDescendents(&layoutScope);
249 } 247 }
250 248
251 ASSERT(!m_layoutState); 249 ASSERT(!m_layoutState);
252 if (!needsLayout()) 250 if (!needsLayout())
253 return; 251 return;
254 252
255 RootLayoutStateScope rootLayoutStateScope(*this); 253 LayoutState rootLayoutState(pageLogicalHeight(), pageLogicalHeightChanged(), *this);
256 254
257 m_pageLogicalHeightChanged = false; 255 m_pageLogicalHeightChanged = false;
258 256
259 layoutContent(); 257 layoutContent();
260 258
261 #ifndef NDEBUG 259 #ifndef NDEBUG
262 checkLayoutState(); 260 checkLayoutState();
263 #endif 261 #endif
264 clearNeedsLayout(); 262 clearNeedsLayout();
265 } 263 }
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 void RenderView::invalidateTreeAfterLayout(const RenderLayerModelObject& paintIn validationContainer) 449 void RenderView::invalidateTreeAfterLayout(const RenderLayerModelObject& paintIn validationContainer)
452 { 450 {
453 ASSERT(RuntimeEnabledFeatures::repaintAfterLayoutEnabled()); 451 ASSERT(RuntimeEnabledFeatures::repaintAfterLayoutEnabled());
454 ASSERT(!needsLayout()); 452 ASSERT(!needsLayout());
455 453
456 // We specifically need to repaint the viewRect since other renderers 454 // We specifically need to repaint the viewRect since other renderers
457 // short-circuit on full-repaint. 455 // short-circuit on full-repaint.
458 if (doingFullRepaint() && !viewRect().isEmpty()) 456 if (doingFullRepaint() && !viewRect().isEmpty())
459 repaintViewRectangle(viewRect()); 457 repaintViewRectangle(viewRect());
460 458
459 LayoutState rootLayoutState(0, false, *this);
Julien - ping for review 2014/06/17 23:34:26 FALSE :( At a minimum we should say which boolean
461 RenderBlock::invalidateTreeAfterLayout(paintInvalidationContainer); 460 RenderBlock::invalidateTreeAfterLayout(paintInvalidationContainer);
462 } 461 }
463 462
464 void RenderView::repaintViewRectangle(const LayoutRect& repaintRect) const 463 void RenderView::repaintViewRectangle(const LayoutRect& repaintRect) const
465 { 464 {
466 ASSERT(!repaintRect.isEmpty()); 465 ASSERT(!repaintRect.isEmpty());
467 466
468 if (document().printing() || !m_frameView) 467 if (document().printing() || !m_frameView)
469 return; 468 return;
470 469
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 if (shouldUsePrintingLayout()) 899 if (shouldUsePrintingLayout())
901 return pageLogicalHeight(); 900 return pageLogicalHeight();
902 return viewLogicalHeight(); 901 return viewLogicalHeight();
903 } 902 }
904 903
905 float RenderView::zoomFactor() const 904 float RenderView::zoomFactor() const
906 { 905 {
907 return m_frameView->frame().pageZoomFactor(); 906 return m_frameView->frame().pageZoomFactor();
908 } 907 }
909 908
910 void RenderView::pushLayoutState(RenderObject& root)
911 {
912 ASSERT(m_layoutStateDisableCount == 0);
913 ASSERT(m_layoutState == 0);
914
915 pushLayoutStateForCurrentFlowThread(root);
916 m_layoutState = new LayoutState(root);
917 }
918
919 bool RenderView::shouldDisableLayoutStateForSubtree(RenderObject& renderer) cons t
920 {
921 RenderObject* o = &renderer;
922 while (o) {
923 if (o->shouldDisableLayoutState())
924 return true;
925 o = o->container();
926 }
927 return false;
928 }
929
930 void RenderView::updateHitTestResult(HitTestResult& result, const LayoutPoint& p oint) 909 void RenderView::updateHitTestResult(HitTestResult& result, const LayoutPoint& p oint)
931 { 910 {
932 if (result.innerNode()) 911 if (result.innerNode())
933 return; 912 return;
934 913
935 Node* node = document().documentElement(); 914 Node* node = document().documentElement();
936 if (node) { 915 if (node) {
937 result.setInnerNode(node); 916 result.setInnerNode(node);
938 if (!result.innerNonSharedNode()) 917 if (!result.innerNonSharedNode())
939 result.setInnerNonSharedNode(node); 918 result.setInnerNonSharedNode(node);
(...skipping 25 matching lines...) Expand all
965 } 944 }
966 945
967 FlowThreadController* RenderView::flowThreadController() 946 FlowThreadController* RenderView::flowThreadController()
968 { 947 {
969 if (!m_flowThreadController) 948 if (!m_flowThreadController)
970 m_flowThreadController = FlowThreadController::create(); 949 m_flowThreadController = FlowThreadController::create();
971 950
972 return m_flowThreadController.get(); 951 return m_flowThreadController.get();
973 } 952 }
974 953
975 void RenderView::pushLayoutStateForCurrentFlowThread(const RenderObject& object) 954 void RenderView::pushLayoutState(LayoutState& layoutState)
976 { 955 {
956 if (m_flowThreadController) {
957 RenderFlowThread* currentFlowThread = m_flowThreadController->currentRen derFlowThread();
958 if (currentFlowThread)
959 currentFlowThread->pushFlowThreadLayoutState(layoutState.renderer()) ;
960 }
961 m_layoutState = &layoutState;
962 }
963
964 void RenderView::popLayoutState()
965 {
966 ASSERT(m_layoutState);
967 m_layoutState = m_layoutState->next();
977 if (!m_flowThreadController) 968 if (!m_flowThreadController)
978 return; 969 return;
979 970
980 RenderFlowThread* currentFlowThread = m_flowThreadController->currentRenderF lowThread();
981 if (!currentFlowThread)
982 return;
983
984 currentFlowThread->pushFlowThreadLayoutState(object);
985 }
986
987 void RenderView::popLayoutStateForCurrentFlowThread()
988 {
989 if (!m_flowThreadController)
990 return;
991
992 RenderFlowThread* currentFlowThread = m_flowThreadController->currentRenderF lowThread(); 971 RenderFlowThread* currentFlowThread = m_flowThreadController->currentRenderF lowThread();
993 if (!currentFlowThread) 972 if (!currentFlowThread)
994 return; 973 return;
995 974
996 currentFlowThread->popFlowThreadLayoutState(); 975 currentFlowThread->popFlowThreadLayoutState();
997 } 976 }
998 977
999 IntervalArena* RenderView::intervalArena() 978 IntervalArena* RenderView::intervalArena()
1000 { 979 {
1001 if (!m_intervalArena) 980 if (!m_intervalArena)
(...skipping 16 matching lines...) Expand all
1018 return viewWidth(IncludeScrollbars) / scale; 997 return viewWidth(IncludeScrollbars) / scale;
1019 } 998 }
1020 999
1021 double RenderView::layoutViewportHeight() const 1000 double RenderView::layoutViewportHeight() const
1022 { 1001 {
1023 float scale = m_frameView ? m_frameView->frame().pageZoomFactor() : 1; 1002 float scale = m_frameView ? m_frameView->frame().pageZoomFactor() : 1;
1024 return viewHeight(IncludeScrollbars) / scale; 1003 return viewHeight(IncludeScrollbars) / scale;
1025 } 1004 }
1026 1005
1027 } // namespace WebCore 1006 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698