diff options
author | Pawel Piech | 2012-02-24 22:26:31 +0000 |
---|---|---|
committer | Pawel Piech | 2012-02-24 23:09:11 +0000 |
commit | 18074ebcb4b7f886e446e1760336fdf2f1896b96 (patch) | |
tree | 004588edd792cd4d621b4c2d30199cf7d39d610c /org.eclipse.debug.ui | |
parent | 8a8b76467672e3c5de49ffacf204ac120b806cc0 (diff) | |
download | eclipse.platform.debug-18074ebcb4b7f886e446e1760336fdf2f1896b96.tar.gz eclipse.platform.debug-18074ebcb4b7f886e446e1760336fdf2f1896b96.tar.xz eclipse.platform.debug-18074ebcb4b7f886e446e1760336fdf2f1896b96.zip |
Bug 372550 - [flex-hierarchy] Poor performance when refreshing a view with large arraysv20120224-2309
(Performance unit test)
Diffstat (limited to 'org.eclipse.debug.ui')
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java index a2c9a9fc9..1fff9e208 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java @@ -220,6 +220,7 @@ public class InternalVirtualTreeModelViewer extends Viewer getContentProvider().inputChanged(this, oldInput, input); fItemsMap.clear(); fInput = input; + mapElement(fInput, getTree()); getContentProvider().postInputChanged(this, oldInput , input); fTree.setData(fInput); fTree.setSelection(EMPTY_ITEMS_ARRAY); @@ -564,28 +565,36 @@ public class InternalVirtualTreeModelViewer extends Viewer return fTree; } - for (int i = 0; item != null && i < path.getSegmentCount(); i++) { - Object segment = path.getSegment(i); - item = item.findItem(segment); + List itemsList = (List)fItemsMap.get(path.getLastSegment()); + for (int i = 0; i < itemsList.size(); i++) { + if ( path.equals(getTreePathFromItem((VirtualItem)itemsList.get(i))) ) { + return (VirtualItem)itemsList.get(i); + } } + +// for (int i = 0; item != null && i < path.getSegmentCount(); i++) { +// Object segment = path.getSegment(i); +// item = item.findItem(segment); +// } return item; } static private final VirtualItem[] EMPTY_ITEMS_ARRAY = new VirtualItem[0]; public VirtualItem[] findItems(Object elementOrTreePath) { - if (elementOrTreePath instanceof TreePath) { - VirtualItem item = findItem((TreePath) elementOrTreePath); - return item == null ? EMPTY_ITEMS_ARRAY : new VirtualItem[] { item }; - } else if (getInput().equals(elementOrTreePath)) { - return new VirtualItem[] { getTree() }; + Object element = elementOrTreePath; + if (elementOrTreePath instanceof TreePath) { + TreePath path = (TreePath)elementOrTreePath; + if (path.getSegmentCount() == 0) { + return new VirtualItem[] { getTree() }; + } + element = path.getLastSegment(); + } + List itemsList = (List) fItemsMap.get(element); + if (itemsList == null) { + return EMPTY_ITEMS_ARRAY; } else { - List itemsList = (List) fItemsMap.get(elementOrTreePath); - if (itemsList == null) { - return EMPTY_ITEMS_ARRAY; - } else { - return (VirtualItem[]) itemsList.toArray(new VirtualItem[itemsList.size()]); - } + return (VirtualItem[]) itemsList.toArray(new VirtualItem[itemsList.size()]); } } @@ -1373,7 +1382,7 @@ public class InternalVirtualTreeModelViewer extends Viewer public void autoExpand(TreePath elementPath) { int level = getAutoExpandLevel(); if (level > 0 || level == org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer.ALL_LEVELS) { - if (level == org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer.ALL_LEVELS || level >= elementPath.getSegmentCount()) { + if (level == org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer.ALL_LEVELS || level > elementPath.getSegmentCount()) { expandToLevel(elementPath, 1); } } |