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

Side by Side Diff: third_party/WebKit/Source/core/dom/Range.cpp

Issue 2034023003: Make appendChild/insertBefore faster with active ranges (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 2016-06-06T14:17:03 Adopt for review comments Created 4 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
OLDNEW
1 /* 1 /*
2 * (C) 1999 Lars Knoll (knoll@kde.org) 2 * (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no) 3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no)
4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no) 4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no)
5 * (C) 2001 Peter Kelly (pmk@post.com) 5 * (C) 2001 Peter Kelly (pmk@post.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved.
7 * Copyright (C) 2011 Motorola Mobility. All rights reserved. 7 * Copyright (C) 2011 Motorola Mobility. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 1321 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 { 1332 {
1333 if (a == b) 1333 if (a == b)
1334 return true; 1334 return true;
1335 if (!a || !b) 1335 if (!a || !b)
1336 return false; 1336 return false;
1337 return a->startPosition() == b->startPosition() && a->endPosition() == b->en dPosition(); 1337 return a->startPosition() == b->startPosition() && a->endPosition() == b->en dPosition();
1338 } 1338 }
1339 1339
1340 static inline void boundaryNodeChildrenChanged(RangeBoundaryPoint& boundary, Con tainerNode* container) 1340 static inline void boundaryNodeChildrenChanged(RangeBoundaryPoint& boundary, Con tainerNode* container)
1341 { 1341 {
1342 boundary.markValid();
1342 if (!boundary.childBefore()) 1343 if (!boundary.childBefore())
1343 return; 1344 return;
1344 if (boundary.container() != container) 1345 if (boundary.container() != container)
1345 return; 1346 return;
1346 boundary.invalidateOffset(); 1347 boundary.invalidateOffset();
1347 } 1348 }
1348 1349
1349 void Range::nodeChildrenChanged(ContainerNode* container) 1350 void Range::nodeChildrenChanged(ContainerNode* container)
1350 { 1351 {
1351 DCHECK(container); 1352 DCHECK(container);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1401 // FIXME: Once DOMNodeRemovedFromDocument mutation event removed, we 1402 // FIXME: Once DOMNodeRemovedFromDocument mutation event removed, we
1402 // should change following if-statement to DCHECK(!node->parentNode). 1403 // should change following if-statement to DCHECK(!node->parentNode).
1403 if (!node.parentNode()) 1404 if (!node.parentNode())
1404 return; 1405 return;
1405 boundaryNodeWillBeRemoved(m_start, node); 1406 boundaryNodeWillBeRemoved(m_start, node);
1406 boundaryNodeWillBeRemoved(m_end, node); 1407 boundaryNodeWillBeRemoved(m_end, node);
1407 } 1408 }
1408 1409
1409 static inline void boundaryTextInserted(RangeBoundaryPoint& boundary, Node* text , unsigned offset, unsigned length) 1410 static inline void boundaryTextInserted(RangeBoundaryPoint& boundary, Node* text , unsigned offset, unsigned length)
1410 { 1411 {
1412 boundary.markValid();
1411 if (boundary.container() != text) 1413 if (boundary.container() != text)
1412 return; 1414 return;
1413 unsigned boundaryOffset = boundary.offset(); 1415 unsigned boundaryOffset = boundary.offset();
1414 if (offset >= boundaryOffset) 1416 if (offset >= boundaryOffset)
1415 return; 1417 return;
1416 boundary.setOffset(boundaryOffset + length); 1418 boundary.setOffset(boundaryOffset + length);
1417 } 1419 }
1418 1420
1419 void Range::didInsertText(Node* text, unsigned offset, unsigned length) 1421 void Range::didInsertText(Node* text, unsigned offset, unsigned length)
1420 { 1422 {
1421 DCHECK(text); 1423 DCHECK(text);
1422 DCHECK_EQ(text->document(), m_ownerDocument); 1424 DCHECK_EQ(text->document(), m_ownerDocument);
1423 boundaryTextInserted(m_start, text, offset, length); 1425 boundaryTextInserted(m_start, text, offset, length);
1424 boundaryTextInserted(m_end, text, offset, length); 1426 boundaryTextInserted(m_end, text, offset, length);
1425 } 1427 }
1426 1428
1427 static inline void boundaryTextRemoved(RangeBoundaryPoint& boundary, Node* text, unsigned offset, unsigned length) 1429 static inline void boundaryTextRemoved(RangeBoundaryPoint& boundary, Node* text, unsigned offset, unsigned length)
1428 { 1430 {
1431 boundary.markValid();
1429 if (boundary.container() != text) 1432 if (boundary.container() != text)
1430 return; 1433 return;
1431 unsigned boundaryOffset = boundary.offset(); 1434 unsigned boundaryOffset = boundary.offset();
1432 if (offset >= boundaryOffset) 1435 if (offset >= boundaryOffset)
1433 return; 1436 return;
1434 if (offset + length >= boundaryOffset) 1437 if (offset + length >= boundaryOffset)
1435 boundary.setOffset(offset); 1438 boundary.setOffset(offset);
1436 else 1439 else
1437 boundary.setOffset(boundaryOffset - length); 1440 boundary.setOffset(boundaryOffset - length);
1438 } 1441 }
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1607 { 1610 {
1608 if (range && range->boundaryPointsValid()) { 1611 if (range && range->boundaryPointsValid()) {
1609 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r ange->endContainer(), "E"); 1612 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r ange->endContainer(), "E");
1610 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset (), range->endOffset()); 1613 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset (), range->endOffset());
1611 } else { 1614 } else {
1612 fprintf(stderr, "Cannot show tree if range is null, or if boundary point s are invalid.\n"); 1615 fprintf(stderr, "Cannot show tree if range is null, or if boundary point s are invalid.\n");
1613 } 1616 }
1614 } 1617 }
1615 1618
1616 #endif 1619 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/ContainerNode.cpp ('k') | third_party/WebKit/Source/core/dom/RangeBoundaryPoint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698