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.tests | |
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.tests')
5 files changed, 71 insertions, 6 deletions
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java index 49643a1b0..7b4cb74d2 100644 --- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java +++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/PerformanceTests.java @@ -51,11 +51,12 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd fShell.setMaximized(true); fShell.setLayout(new FillLayout()); + fVirtualItemValidator = new VisibleVirtualItemValidator(0, Integer.MAX_VALUE); fViewer = createViewer(fDisplay, fShell); fListener = new TestModelUpdatesListener(fViewer, false, false); - fShell.open (); + fShell.open(); } abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell); @@ -87,6 +88,8 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd */ abstract protected int getTestModelDepth(); + protected VisibleVirtualItemValidator fVirtualItemValidator; + public void testRefreshStruct() throws InterruptedException { TestModel model = new TestModel(); model.setRoot( new TestElement(model, "root", new TestElement[0] ) ); @@ -105,7 +108,7 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd Performance perf = Performance.getDefault(); PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this)); try { - for (int i = 0; i < 100; i++) { + for (int i = 0; i < 10; i++) { // Update the model model.setAllAppendix(" - pass " + i); @@ -127,6 +130,53 @@ abstract public class PerformanceTests extends TestCase implements ITestModelUpd } } + public void testRefreshStruct2() throws InterruptedException { + TestModel model = new TestModel(); + model.setRoot( new TestElement(model, "root", new TestElement[0] ) ); + model.setElementChildren(TreePath.EMPTY, TestModel.makeMultiLevelElements2(model, new int[] { 2, 3000, 1}, "model.")); + + fViewer.setAutoExpandLevel(2); + // Create the listener + //fListener.reset(TreePath.EMPTY, model.getRootElement(), -1, false, false); + fListener.reset(); + + // Set the input into the view and update the view. + fViewer.setInput(model.getRootElement()); + while (!fListener.isFinished(ALL_UPDATES_COMPLETE)) if (!fDisplay.readAndDispatch ()) Thread.sleep(0); + //model.validateData(fViewer, TreePath.EMPTY); + + fVirtualItemValidator.setVisibleRange(0, 50); + + Performance perf = Performance.getDefault(); + PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this)); + try { + for (int i = 0; i < 100; i++) { + // Update the model + model.setAllAppendix(" - pass " + i); + + TestElement element = model.getRootElement(); + //fListener.reset(TreePath.EMPTY, element, -1, false, false); + fListener.reset(); + + meter.start(); + model.postDelta(new ModelDelta(element, IModelDelta.CONTENT)); + while (!fListener.isFinished(MODEL_CHANGED_COMPLETE)) + if (!fDisplay.readAndDispatch ()) Thread.sleep(0); + model.postDelta(new ModelDelta(element, IModelDelta.CONTENT)); + while (!fListener.isFinished(ALL_UPDATES_COMPLETE | MODEL_CHANGED_COMPLETE)) + if (!fDisplay.readAndDispatch ()) Thread.sleep(0); + meter.stop(); + System.gc(); + } + + meter.commit(); + perf.assertPerformance(meter); + } finally { + meter.dispose(); + } + } + + public void testRefreshStructReplaceElements() throws InterruptedException { TestModel model = new TestModel(); model.setRoot( new TestElement(model, "root", new TestElement[0] ) ); diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java index e497d5837..d2459f849 100644 --- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java +++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModel.java @@ -688,6 +688,20 @@ public class TestModel implements IElementContentProvider, IElementLabelProvider return elements; } + public static TestElement[] makeMultiLevelElements2(TestModel model, int[] levelCounts, String prefix) { + if (levelCounts.length == 0) return new TestElement[0]; + int count = levelCounts[0]; + int[] oldLevelCounts = levelCounts; + levelCounts = new int[levelCounts.length - 1]; + System.arraycopy(oldLevelCounts, 1, levelCounts, 0, levelCounts.length); + TestElement[] elements = new TestElement[count]; + for (int i = 0; i < count; i++) { + String name = prefix + i; + elements[i] = new TestElement(model, name, makeMultiLevelElements2(model, levelCounts, name + ".")); + } + return elements; + } + public static TestModel simpleMultiLevel() { TestModel model = new TestModel(); model.setRoot( new TestElement(model, "root", new TestElement[] { diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java index b53ac539d..2473019ce 100644 --- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java +++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerFilterTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009 Wind River Systems and others. + * Copyright (c) 2011 Wind River Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -18,7 +18,7 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /** - * @since 3.6 + * @since 3.8 */ public class VirtualViewerFilterTests extends FilterTests { diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java index 7bc589bf7..3f0fd7dca 100644 --- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java +++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VirtualViewerPerformanceTests.java @@ -13,6 +13,7 @@ package org.eclipe.debug.tests.viewer.model; import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer; import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; @@ -26,7 +27,7 @@ public class VirtualViewerPerformanceTests extends PerformanceTests { } protected IInternalTreeModelViewer createViewer(Display display, Shell shell) { - return new VirtualTreeModelViewer(fDisplay, 0, new PresentationContext("TestViewer")); + return new VirtualTreeModelViewer(fDisplay, SWT.VIRTUAL, new PresentationContext("TestViewer"), fVirtualItemValidator); } protected int getTestModelDepth() { diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java index b2c122440..b23c5dcbd 100644 --- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java +++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/VisibleVirtualItemValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009 Wind River Systems and others. + * Copyright (c) 2011 Wind River Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at |