Title: [136145] trunk/Source/WebCore
Revision
136145
Author
[email protected]
Date
2012-11-29 12:06:37 -0800 (Thu, 29 Nov 2012)

Log Message

Web Inspector: introduce fast case for within-chunk edit
https://bugs.webkit.org/show_bug.cgi?id=103545

Reviewed by Vsevolod Vlasov.

Special-casing edits within the chunk for faster operation.

* inspector/front-end/DOMExtension.js:
(removeSubsequentNodes):
* inspector/front-end/DefaultTextEditor.js:
(WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (136144 => 136145)


--- trunk/Source/WebCore/ChangeLog	2012-11-29 19:59:14 UTC (rev 136144)
+++ trunk/Source/WebCore/ChangeLog	2012-11-29 20:06:37 UTC (rev 136145)
@@ -1,5 +1,19 @@
 2012-11-29  Pavel Feldman  <[email protected]>
 
+        Web Inspector: introduce fast case for within-chunk edit
+        https://bugs.webkit.org/show_bug.cgi?id=103545
+
+        Reviewed by Vsevolod Vlasov.
+
+        Special-casing edits within the chunk for faster operation.
+
+        * inspector/front-end/DOMExtension.js:
+        (removeSubsequentNodes):
+        * inspector/front-end/DefaultTextEditor.js:
+        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
+
+2012-11-29  Pavel Feldman  <[email protected]>
+
         Web Inspector: Console: hovering node wrappers in object tree should highlight them on the page
         https://bugs.webkit.org/show_bug.cgi?id=101150
 

Modified: trunk/Source/WebCore/inspector/front-end/DOMExtension.js (136144 => 136145)


--- trunk/Source/WebCore/inspector/front-end/DOMExtension.js	2012-11-29 19:59:14 UTC (rev 136144)
+++ trunk/Source/WebCore/inspector/front-end/DOMExtension.js	2012-11-29 20:06:37 UTC (rev 136145)
@@ -195,6 +195,18 @@
         this.parentElement.removeChild(this);
 }
 
+/**
+ * @param {Node} fromNode
+ * @param {Node} toNode
+ */
+function removeSubsequentNodes(fromNode, toNode)
+{
+    for (var node = fromNode; node && node !== toNode; ) {
+        var nodeToRemove = node;
+        node = node.nextSibling;
+        nodeToRemove.remove();
+    }
+}
 
 /**
  * @constructor

Modified: trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js (136144 => 136145)


--- trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js	2012-11-29 19:59:14 UTC (rev 136144)
+++ trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js	2012-11-29 20:06:37 UTC (rev 136145)
@@ -2415,13 +2415,28 @@
         // Remove damaged chunks from DOM and from textChunks model.
         var lastUndamagedChunk = firstDamagedChunkNumber > 0 ? this._textChunks[firstDamagedChunkNumber - 1] : null;
         var firstUndamagedChunk = lastDamagedChunkNumber + 1 < this._textChunks.length ? this._textChunks[lastDamagedChunkNumber + 1] : null;
+
         var removeDOMFromNode = lastUndamagedChunk ? lastUndamagedChunk.lastElement().nextSibling : this._container.firstChild;
         var removeDOMToNode = firstUndamagedChunk ? firstUndamagedChunk.firstElement() : null;
-        for (var node = removeDOMFromNode; node && node !== removeDOMToNode; ) {
-            var nodeToRemove = node;
-            node = node.nextSibling;
-            nodeToRemove.remove();
+
+        // Fast case - patch single expanded chunk that did not grow / shrink during edit.
+        if (!linesDiff && firstDamagedChunk === lastDamagedChunk && firstDamagedChunk._expandedLineRows) {
+            var lastUndamagedLineRow = lastDamagedChunk.expandedLineRow(oldRange.startLine - 1);
+            var firstUndamagedLineRow = firstDamagedChunk.expandedLineRow(oldRange.endLine + 1);
+            var localRemoveDOMFromNode = lastUndamagedLineRow ? lastUndamagedLineRow.nextSibling : removeDOMFromNode;
+            var localRemoveDOMToNode = firstUndamagedLineRow || removeDOMToNode;
+            removeSubsequentNodes(localRemoveDOMFromNode, localRemoveDOMToNode);
+            for (var i = newRange.startLine; i < newRange.endLine + 1; ++i) {
+                var row = firstDamagedChunk._createRow(i);
+                firstDamagedChunk._expandedLineRows[i - firstDamagedChunk.startLine] = row;
+                this._container.insertBefore(row, localRemoveDOMToNode);
+            }
+            firstDamagedChunk.updateCollapsedLineRow();
+            this._assertDOMMatchesTextModel();
+            return;
         }
+
+        removeSubsequentNodes(removeDOMFromNode, removeDOMToNode);
         this._textChunks.splice(firstDamagedChunkNumber, lastDamagedChunkNumber - firstDamagedChunkNumber + 1);
 
         // Compute damaged chunks span
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to