Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2012-02-24 22:26:31 +0000
committerPawel Piech2012-02-24 23:09:11 +0000
commit18074ebcb4b7f886e446e1760336fdf2f1896b96 (patch)
tree004588edd792cd4d621b4c2d30199cf7d39d610c /org.eclipse.debug.ui
parent8a8b76467672e3c5de49ffacf204ac120b806cc0 (diff)
downloadeclipse.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.java39
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);
}
}

Back to the top