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

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

Issue 2039113003: Make removeChild faster with active ranges (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 2016-06-06T16:21:06 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 1319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 1330
1331 bool areRangesEqual(const Range* a, const Range* b) 1331 bool areRangesEqual(const Range* a, const Range* b)
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)
1341 {
1342 boundary.markValid();
1343 if (!boundary.childBefore())
1344 return;
1345 if (boundary.container() != container)
1346 return;
1347 boundary.invalidateOffset();
1348 }
1349
1350 void Range::nodeChildrenChanged(ContainerNode* container)
1351 {
1352 DCHECK(container);
1353 DCHECK_EQ(container->document(), m_ownerDocument);
1354 boundaryNodeChildrenChanged(m_start, container);
1355 boundaryNodeChildrenChanged(m_end, container);
1356 }
1357
1358 static inline void boundaryNodeChildrenWillBeRemoved(RangeBoundaryPoint& boundar y, ContainerNode& container) 1340 static inline void boundaryNodeChildrenWillBeRemoved(RangeBoundaryPoint& boundar y, ContainerNode& container)
1359 { 1341 {
1360 for (Node* nodeToBeRemoved = container.firstChild(); nodeToBeRemoved; nodeTo BeRemoved = nodeToBeRemoved->nextSibling()) { 1342 for (Node* nodeToBeRemoved = container.firstChild(); nodeToBeRemoved; nodeTo BeRemoved = nodeToBeRemoved->nextSibling()) {
1361 if (boundary.childBefore() == nodeToBeRemoved) { 1343 if (boundary.childBefore() == nodeToBeRemoved) {
1362 boundary.setToStartOfNode(container); 1344 boundary.setToStartOfNode(container);
1363 return; 1345 return;
1364 } 1346 }
1365 1347
1366 for (Node* n = boundary.container(); n; n = n->parentNode()) { 1348 for (Node* n = boundary.container(); n; n = n->parentNode()) {
1367 if (n == nodeToBeRemoved) { 1349 if (n == nodeToBeRemoved) {
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1610 { 1592 {
1611 if (range && range->boundaryPointsValid()) { 1593 if (range && range->boundaryPointsValid()) {
1612 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r ange->endContainer(), "E"); 1594 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r ange->endContainer(), "E");
1613 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset (), range->endOffset()); 1595 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset (), range->endOffset());
1614 } else { 1596 } else {
1615 fprintf(stderr, "Cannot show tree if range is null, or if boundary point s are invalid.\n"); 1597 fprintf(stderr, "Cannot show tree if range is null, or if boundary point s are invalid.\n");
1616 } 1598 }
1617 } 1599 }
1618 1600
1619 #endif 1601 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Range.h ('k') | third_party/WebKit/Source/core/dom/RangeBoundaryPoint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698