blob: 7d86a702e092cfa19053a51e730c2b675421fca1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.performance.layout;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.test.performance.Dimension;
import org.eclipse.ui.WorkbenchException;
import org.eclipse.ui.tests.performance.BasicPerformanceTest;
import org.eclipse.ui.tests.performance.TestRunnable;
/**
* Measures the time to resize the widget 10 times, including the time required to redraw.
*
* @since 3.1
*/
public class ResizeTest extends BasicPerformanceTest {
private TestWidgetFactory widgetFactory;
private int xIterations = 10;
private int yIterations = 10;
private String tagString;
/**
* @param testName
*/
public ResizeTest(TestWidgetFactory widgetFactory) {
this(widgetFactory, NONE, widgetFactory.getName() + " setSize");
}
/**
* @param testName
*/
public ResizeTest(TestWidgetFactory widgetFactory, int tagging, String tagString) {
super(widgetFactory.getName() + " setSize",tagging);
this.tagString = tagString;
this.widgetFactory = widgetFactory;
}
/**
* Run the test
*/
protected void runTest() throws CoreException, WorkbenchException {
tagIfNecessary(tagString,Dimension.ELAPSED_PROCESS);
widgetFactory.init();
final Composite widget = widgetFactory.getControl();
Rectangle initialBounds = widget.getBounds();
final Point maxSize = widgetFactory.getMaxSize();
waitForBackgroundJobs();
processEvents();
exercise(new TestRunnable() {
public void run() {
for (int xIteration = 0; xIteration < xIterations; xIteration++) {
startMeasuring();
for (int yIteration = 0; yIteration < yIterations; yIteration++) {
// Avoid giving the same x value twice in a row in order to make it hard to cache
int xSize = maxSize.x * ((xIteration + yIteration) % xIterations) / xIterations;
int ySize = maxSize.y * yIteration / yIterations;
widget.setSize(xSize, ySize);
processEvents();
}
stopMeasuring();
}
}
});
commitMeasurements();
assertPerformance();
widget.setBounds(initialBounds);
widgetFactory.done();
}
}