From 5ec316d268fac43871c1e2f1671f3c78a727f8b3 Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Fri, 17 Jun 2011 13:36:28 +0400 Subject: [PATCH] IDEA-69317 Editor: Improve performance Minor improvements to soft wraps recalculation --- .../editor/impl/softwrap/mapping/CacheEntry.java | 15 ++++++++++++--- .../mapping/CachingSoftWrapDataMapper.java | 8 ++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CacheEntry.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CacheEntry.java index 8d687a168bf5..643d3b2da844 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CacheEntry.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CacheEntry.java @@ -180,13 +180,22 @@ class CacheEntry implements Comparable, Cloneable { myTabPositions.add(tabData); } + @SuppressWarnings("ForLoopReplaceableByForEach") public void advance(final int offsetDiff) { startOffset += offsetDiff; endOffset += offsetDiff; - for (TabData tabData : myTabPositions) { - tabData.offset += offsetDiff; + + // 'For-each' loop is not used here because this code is called quite often and profile shows the Iterator usage here + // produces performance drawback. + for (int i = 0; i < myTabPositions.size(); i++) { + myTabPositions.get(i).offset += offsetDiff; } - final TIntObjectHashMap newFoldingData = new TIntObjectHashMap(); + + if (myFoldingData.isEmpty()) { + return; + } + + final TIntObjectHashMap newFoldingData = new TIntObjectHashMap(myFoldingData.size()); myFoldingData.forEachEntry(new TIntObjectProcedure() { @Override public boolean execute(int offset, FoldingData foldingData) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java index 9dd52e8bb21f..a1b93d2f24ef 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java @@ -542,6 +542,7 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw * */ + @SuppressWarnings("ForLoopReplaceableByForEach") private void applyStateChange(int offsetsDiff) { if (myNotAffectedByUpdateTailCacheEntries.isEmpty()) { return; @@ -565,7 +566,10 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw offsetsDiff)); } - for (CacheEntry cacheEntry : myNotAffectedByUpdateTailCacheEntries) { + // 'For-each' loop is not used here because this code is called quite often and profile shows the Iterator usage here + // produces performance drawback. + for (int i = 0; i < myNotAffectedByUpdateTailCacheEntries.size(); i++) { + CacheEntry cacheEntry = myNotAffectedByUpdateTailCacheEntries.get(i); cacheEntry.visualLine += visualLinesDiff; cacheEntry.startLogicalLine += logicalLinesDiff; cacheEntry.endLogicalLine += logicalLinesDiff; @@ -574,7 +578,7 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw cacheEntry.endSoftWrapLinesBefore += softWrappedLinesDiff; cacheEntry.startFoldedLines += foldedLinesDiff; cacheEntry.endFoldedLines += foldedLinesDiff; - } + } } @Override