From 6670cc8aa089cb22fc2b7cb52976013ee4b99901 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 25 Feb 2015 10:42:39 +0100 Subject: [PATCH 1/2] :racehorse: Speed up `mergeCursors` --- src/text-editor.coffee | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 8badd9287..76948990d 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1797,13 +1797,12 @@ class TextEditor extends Model # Merge cursors that have the same screen position mergeCursors: -> - positions = [] - for cursor in @getCursors() - position = cursor.getBufferPosition().toString() - if position in positions - cursor.destroy() - else - positions.push(position) + [lastCursor, cursors...] = @getCursorsOrderedByBufferPosition() + lastBufferPosition = lastCursor.getBufferPosition() + for cursor in cursors + currentBufferPosition = cursor.getBufferPosition() + cursor.destroy() if lastBufferPosition.compare(currentBufferPosition) == 0 + lastBufferPosition = currentBufferPosition preserveCursorPositionOnBufferReload: -> cursorPosition = null From 4555c77e5a7ad4f486e9dc65b51a4265b5dc02f3 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 25 Feb 2015 11:18:51 +0100 Subject: [PATCH 2/2] Use hashes instead, and avoid sorting :punch: --- src/text-editor.coffee | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 76948990d..2e6cfdf92 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1797,12 +1797,13 @@ class TextEditor extends Model # Merge cursors that have the same screen position mergeCursors: -> - [lastCursor, cursors...] = @getCursorsOrderedByBufferPosition() - lastBufferPosition = lastCursor.getBufferPosition() - for cursor in cursors - currentBufferPosition = cursor.getBufferPosition() - cursor.destroy() if lastBufferPosition.compare(currentBufferPosition) == 0 - lastBufferPosition = currentBufferPosition + positions = {} + for cursor in @getCursors() + position = cursor.getBufferPosition().toString() + if positions.hasOwnProperty(position) + cursor.destroy() + else + positions[position] = true preserveCursorPositionOnBufferReload: -> cursorPosition = null