⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 136145 in webkit


Ignore:
Timestamp:
Nov 29, 2012, 12:06:37 PM (14 years ago)
Author:
pfeldman@chromium.org
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):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r136144 r136145  
     12012-11-29  Pavel Feldman  <pfeldman@chromium.org>
     2
     3        Web Inspector: introduce fast case for within-chunk edit
     4        https://bugs.webkit.org/show_bug.cgi?id=103545
     5
     6        Reviewed by Vsevolod Vlasov.
     7
     8        Special-casing edits within the chunk for faster operation.
     9
     10        * inspector/front-end/DOMExtension.js:
     11        (removeSubsequentNodes):
     12        * inspector/front-end/DefaultTextEditor.js:
     13        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
     14
    1152012-11-29  Pavel Feldman  <pfeldman@chromium.org>
    216
  • trunk/Source/WebCore/inspector/front-end/DOMExtension.js

    r135683 r136145  
    196196}
    197197
     198/**
     199 * @param {Node} fromNode
     200 * @param {Node} toNode
     201 */
     202function removeSubsequentNodes(fromNode, toNode)
     203{
     204    for (var node = fromNode; node && node !== toNode; ) {
     205        var nodeToRemove = node;
     206        node = node.nextSibling;
     207        nodeToRemove.remove();
     208    }
     209}
    198210
    199211/**
  • trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js

    r135606 r136145  
    24162416        var lastUndamagedChunk = firstDamagedChunkNumber > 0 ? this._textChunks[firstDamagedChunkNumber - 1] : null;
    24172417        var firstUndamagedChunk = lastDamagedChunkNumber + 1 < this._textChunks.length ? this._textChunks[lastDamagedChunkNumber + 1] : null;
     2418
    24182419        var removeDOMFromNode = lastUndamagedChunk ? lastUndamagedChunk.lastElement().nextSibling : this._container.firstChild;
    24192420        var removeDOMToNode = firstUndamagedChunk ? firstUndamagedChunk.firstElement() : null;
    2420         for (var node = removeDOMFromNode; node && node !== removeDOMToNode; ) {
    2421             var nodeToRemove = node;
    2422             node = node.nextSibling;
    2423             nodeToRemove.remove();
    2424         }
     2421
     2422        // Fast case - patch single expanded chunk that did not grow / shrink during edit.
     2423        if (!linesDiff && firstDamagedChunk === lastDamagedChunk && firstDamagedChunk._expandedLineRows) {
     2424            var lastUndamagedLineRow = lastDamagedChunk.expandedLineRow(oldRange.startLine - 1);
     2425            var firstUndamagedLineRow = firstDamagedChunk.expandedLineRow(oldRange.endLine + 1);
     2426            var localRemoveDOMFromNode = lastUndamagedLineRow ? lastUndamagedLineRow.nextSibling : removeDOMFromNode;
     2427            var localRemoveDOMToNode = firstUndamagedLineRow || removeDOMToNode;
     2428            removeSubsequentNodes(localRemoveDOMFromNode, localRemoveDOMToNode);
     2429            for (var i = newRange.startLine; i < newRange.endLine + 1; ++i) {
     2430                var row = firstDamagedChunk._createRow(i);
     2431                firstDamagedChunk._expandedLineRows[i - firstDamagedChunk.startLine] = row;
     2432                this._container.insertBefore(row, localRemoveDOMToNode);
     2433            }
     2434            firstDamagedChunk.updateCollapsedLineRow();
     2435            this._assertDOMMatchesTextModel();
     2436            return;
     2437        }
     2438
     2439        removeSubsequentNodes(removeDOMFromNode, removeDOMToNode);
    24252440        this._textChunks.splice(firstDamagedChunkNumber, lastDamagedChunkNumber - firstDamagedChunkNumber + 1);
    24262441
Note: See TracChangeset for help on using the changeset viewer.