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

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

Issue 16896019: Replace RenderArena with PartitionAlloc. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 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 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 16 matching lines...) Expand all
27 #include "core/dom/WebCoreMemoryInstrumentation.h" 27 #include "core/dom/WebCoreMemoryInstrumentation.h"
28 #include "core/editing/VisiblePosition.h" 28 #include "core/editing/VisiblePosition.h"
29 #include "core/page/Chrome.h" 29 #include "core/page/Chrome.h"
30 #include "core/page/Frame.h" 30 #include "core/page/Frame.h"
31 #include "core/page/Page.h" 31 #include "core/page/Page.h"
32 #include "core/platform/graphics/FloatQuad.h" 32 #include "core/platform/graphics/FloatQuad.h"
33 #include "core/platform/graphics/GraphicsContext.h" 33 #include "core/platform/graphics/GraphicsContext.h"
34 #include "core/platform/graphics/transforms/TransformState.h" 34 #include "core/platform/graphics/transforms/TransformState.h"
35 #include "core/rendering/HitTestResult.h" 35 #include "core/rendering/HitTestResult.h"
36 #include "core/rendering/InlineTextBox.h" 36 #include "core/rendering/InlineTextBox.h"
37 #include "core/rendering/RenderArena.h"
38 #include "core/rendering/RenderBlock.h" 37 #include "core/rendering/RenderBlock.h"
39 #include "core/rendering/RenderFlowThread.h" 38 #include "core/rendering/RenderFlowThread.h"
40 #include "core/rendering/RenderFullScreen.h" 39 #include "core/rendering/RenderFullScreen.h"
41 #include "core/rendering/RenderGeometryMap.h" 40 #include "core/rendering/RenderGeometryMap.h"
42 #include "core/rendering/RenderLayer.h" 41 #include "core/rendering/RenderLayer.h"
43 #include "core/rendering/RenderTheme.h" 42 #include "core/rendering/RenderTheme.h"
44 #include "core/rendering/RenderView.h" 43 #include "core/rendering/RenderView.h"
45 #include "core/rendering/style/StyleInheritedData.h" 44 #include "core/rendering/style/StyleInheritedData.h"
46 45
47 using namespace std; 46 using namespace std;
48 47
49 namespace WebCore { 48 namespace WebCore {
50 49
51 RenderInline::RenderInline(Element* element) 50 RenderInline::RenderInline(Element* element)
52 : RenderBoxModelObject(element) 51 : RenderBoxModelObject(element)
53 , m_alwaysCreateLineBoxes(false) 52 , m_alwaysCreateLineBoxes(false)
54 { 53 {
55 setChildrenInline(true); 54 setChildrenInline(true);
56 } 55 }
57 56
58 RenderInline* RenderInline::createAnonymous(Document* document) 57 RenderInline* RenderInline::createAnonymous(Document* document)
59 { 58 {
60 RenderInline* renderer = new (document->renderArena()) RenderInline(0); 59 RenderInline* renderer = new RenderInline(0);
61 renderer->setDocumentForAnonymous(document); 60 renderer->setDocumentForAnonymous(document);
62 return renderer; 61 return renderer;
63 } 62 }
64 63
65 void RenderInline::willBeDestroyed() 64 void RenderInline::willBeDestroyed()
66 { 65 {
67 #if !ASSERT_DISABLED 66 #if !ASSERT_DISABLED
68 // Make sure we do not retain "this" in the continuation outline table map o f our containing blocks. 67 // Make sure we do not retain "this" in the continuation outline table map o f our containing blocks.
69 if (parent() && style()->visibility() == VISIBLE && hasOutline()) { 68 if (parent() && style()->visibility() == VISIBLE && hasOutline()) {
70 bool containingBlockPaintsContinuationOutline = continuation() || isInli neElementContinuation(); 69 bool containingBlockPaintsContinuationOutline = continuation() || isInli neElementContinuation();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 // not have a parent that means they are either already disconnected or 104 // not have a parent that means they are either already disconnected or
106 // root lines that can just be destroyed without disconnecting. 105 // root lines that can just be destroyed without disconnecting.
107 if (firstLineBox()->parent()) { 106 if (firstLineBox()->parent()) {
108 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLi neBox()) 107 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLi neBox())
109 box->remove(); 108 box->remove();
110 } 109 }
111 } else if (parent()) 110 } else if (parent())
112 parent()->dirtyLinesFromChangedChild(this); 111 parent()->dirtyLinesFromChangedChild(this);
113 } 112 }
114 113
115 m_lineBoxes.deleteLineBoxes(renderArena()); 114 m_lineBoxes.deleteLineBoxes();
116 115
117 RenderBoxModelObject::willBeDestroyed(); 116 RenderBoxModelObject::willBeDestroyed();
118 } 117 }
119 118
120 RenderInline* RenderInline::inlineElementContinuation() const 119 RenderInline* RenderInline::inlineElementContinuation() const
121 { 120 {
122 RenderBoxModelObject* continuation = this->continuation(); 121 RenderBoxModelObject* continuation = this->continuation();
123 if (!continuation || continuation->isInline()) 122 if (!continuation || continuation->isInline())
124 return toRenderInline(continuation); 123 return toRenderInline(continuation);
125 return toRenderBlock(continuation)->inlineElementContinuation(); 124 return toRenderBlock(continuation)->inlineElementContinuation();
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 return; 325 return;
327 } 326 }
328 327
329 RenderBoxModelObject::addChild(newChild, beforeChild); 328 RenderBoxModelObject::addChild(newChild, beforeChild);
330 329
331 newChild->setNeedsLayoutAndPrefWidthsRecalc(); 330 newChild->setNeedsLayoutAndPrefWidthsRecalc();
332 } 331 }
333 332
334 RenderInline* RenderInline::clone() const 333 RenderInline* RenderInline::clone() const
335 { 334 {
336 RenderInline* cloneInline = new (renderArena()) RenderInline(node()); 335 RenderInline* cloneInline = new RenderInline(node());
337 cloneInline->setStyle(style()); 336 cloneInline->setStyle(style());
338 cloneInline->setFlowThreadState(flowThreadState()); 337 cloneInline->setFlowThreadState(flowThreadState());
339 return cloneInline; 338 return cloneInline;
340 } 339 }
341 340
342 void RenderInline::splitInlines(RenderBlock* fromBlock, RenderBlock* toBlock, 341 void RenderInline::splitInlines(RenderBlock* fromBlock, RenderBlock* toBlock,
343 RenderBlock* middleBlock, 342 RenderBlock* middleBlock,
344 RenderObject* beforeChild, RenderBoxModelObject* oldCont) 343 RenderObject* beforeChild, RenderBoxModelObject* oldCont)
345 { 344 {
346 // Create a clone of this inline. 345 // Create a clone of this inline.
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 pre->children()->appendChildNode(pre, block->children()->removeChild Node(block, no)); 467 pre->children()->appendChildNode(pre, block->children()->removeChild Node(block, no));
469 no->setNeedsLayoutAndPrefWidthsRecalc(); 468 no->setNeedsLayoutAndPrefWidthsRecalc();
470 } 469 }
471 } 470 }
472 471
473 splitInlines(pre, post, newBlockBox, beforeChild, oldCont); 472 splitInlines(pre, post, newBlockBox, beforeChild, oldCont);
474 473
475 // We already know the newBlockBox isn't going to contain inline kids, so av oid wasting 474 // We already know the newBlockBox isn't going to contain inline kids, so av oid wasting
476 // time in makeChildrenNonInline by just setting this explicitly up front. 475 // time in makeChildrenNonInline by just setting this explicitly up front.
477 newBlockBox->setChildrenInline(false); 476 newBlockBox->setChildrenInline(false);
478
479 // We delayed adding the newChild until now so that the |newBlockBox| would be fully
480 // connected, thus allowing newChild access to a renderArena should it need
481 // to wrap itself in additional boxes (e.g., table construction).
482 newBlockBox->addChild(newChild); 477 newBlockBox->addChild(newChild);
483 478
484 // Always just do a full layout in order to ensure that line boxes (especial ly wrappers for images) 479 // Always just do a full layout in order to ensure that line boxes (especial ly wrappers for images)
485 // get deleted properly. Because objects moves from the pre block into the post block, we want to 480 // get deleted properly. Because objects moves from the pre block into the post block, we want to
486 // make new line boxes instead of leaving the old line boxes around. 481 // make new line boxes instead of leaving the old line boxes around.
487 pre->setNeedsLayoutAndPrefWidthsRecalc(); 482 pre->setNeedsLayoutAndPrefWidthsRecalc();
488 block->setNeedsLayoutAndPrefWidthsRecalc(); 483 block->setNeedsLayoutAndPrefWidthsRecalc();
489 post->setNeedsLayoutAndPrefWidthsRecalc(); 484 post->setNeedsLayoutAndPrefWidthsRecalc();
490 } 485 }
491 486
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 result.setInnerNode(n); 1233 result.setInnerNode(n);
1239 if (!result.innerNonSharedNode()) 1234 if (!result.innerNonSharedNode())
1240 result.setInnerNonSharedNode(n); 1235 result.setInnerNonSharedNode(n);
1241 result.setLocalPoint(localPoint); 1236 result.setLocalPoint(localPoint);
1242 } 1237 }
1243 } 1238 }
1244 1239
1245 void RenderInline::dirtyLineBoxes(bool fullLayout) 1240 void RenderInline::dirtyLineBoxes(bool fullLayout)
1246 { 1241 {
1247 if (fullLayout) { 1242 if (fullLayout) {
1248 m_lineBoxes.deleteLineBoxes(renderArena()); 1243 m_lineBoxes.deleteLineBoxes();
1249 return; 1244 return;
1250 } 1245 }
1251 1246
1252 if (!alwaysCreateLineBoxes()) { 1247 if (!alwaysCreateLineBoxes()) {
1253 // We have to grovel into our children in order to dirty the appropriate lines. 1248 // We have to grovel into our children in order to dirty the appropriate lines.
1254 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling() ) { 1249 for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling() ) {
1255 if (curr->isFloatingOrOutOfFlowPositioned()) 1250 if (curr->isFloatingOrOutOfFlowPositioned())
1256 continue; 1251 continue;
1257 if (curr->isBox() && !curr->needsLayout()) { 1252 if (curr->isBox() && !curr->needsLayout()) {
1258 RenderBox* currBox = toRenderBox(curr); 1253 RenderBox* currBox = toRenderBox(curr);
(...skipping 10 matching lines...) Expand all
1269 childText->root()->markDirty(); 1264 childText->root()->markDirty();
1270 } 1265 }
1271 } 1266 }
1272 } 1267 }
1273 } else 1268 } else
1274 m_lineBoxes.dirtyLineBoxes(); 1269 m_lineBoxes.dirtyLineBoxes();
1275 } 1270 }
1276 1271
1277 void RenderInline::deleteLineBoxTree() 1272 void RenderInline::deleteLineBoxTree()
1278 { 1273 {
1279 m_lineBoxes.deleteLineBoxTree(renderArena()); 1274 m_lineBoxes.deleteLineBoxTree();
1280 } 1275 }
1281 1276
1282 InlineFlowBox* RenderInline::createInlineFlowBox() 1277 InlineFlowBox* RenderInline::createInlineFlowBox()
1283 { 1278 {
1284 return new (renderArena()) InlineFlowBox(this); 1279 return new InlineFlowBox(this);
1285 } 1280 }
1286 1281
1287 InlineFlowBox* RenderInline::createAndAppendInlineFlowBox() 1282 InlineFlowBox* RenderInline::createAndAppendInlineFlowBox()
1288 { 1283 {
1289 setAlwaysCreateLineBoxes(); 1284 setAlwaysCreateLineBoxes();
1290 InlineFlowBox* flowBox = createInlineFlowBox(); 1285 InlineFlowBox* flowBox = createInlineFlowBox();
1291 m_lineBoxes.appendLineBox(flowBox); 1286 m_lineBoxes.appendLineBox(flowBox);
1292 return flowBox; 1287 return flowBox;
1293 } 1288 }
1294 1289
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 1559
1565 void RenderInline::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const 1560 void RenderInline::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
1566 { 1561 {
1567 MemoryClassInfo info(memoryObjectInfo, this, PlatformMemoryTypes::Rendering) ; 1562 MemoryClassInfo info(memoryObjectInfo, this, PlatformMemoryTypes::Rendering) ;
1568 RenderBoxModelObject::reportMemoryUsage(memoryObjectInfo); 1563 RenderBoxModelObject::reportMemoryUsage(memoryObjectInfo);
1569 info.addMember(m_children, "children"); 1564 info.addMember(m_children, "children");
1570 info.addMember(m_lineBoxes, "lineBoxes"); 1565 info.addMember(m_lineBoxes, "lineBoxes");
1571 } 1566 }
1572 1567
1573 } // namespace WebCore 1568 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698