blob: 1f2ee1d4ad6c1da5203abdb2792246636918fbe0 [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.jface.util.Geometry;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.WorkbenchException;
import org.eclipse.ui.tests.performance.BasicPerformanceTest;
import org.eclipse.ui.tests.performance.TestRunnable;
/**
* Measures the time required to layout the widget 10 times. Does not include the time
* required for any deferred repaints.
*
* @since 3.1
*/
public class LayoutTest extends BasicPerformanceTest {
private TestWidgetFactory widgetFactory;
private int xIterations = 10;
private int yIterations = 10;
private boolean flushState;
/**
* @param testName
*/
public LayoutTest(TestWidgetFactory widgetFactory, boolean flushState) {
super(widgetFactory.getName() + " layout(" + (flushState ? "true" : "false") + ")");
this.widgetFactory = widgetFactory;
this.flushState = flushState;
}
/**
* Run the test
*/
protected void runTest() throws CoreException, WorkbenchException {
widgetFactory.init();
final Composite widget = widgetFactory.getControl();
final Point maxSize = widgetFactory.getMaxSize();
Rectangle initialBounds = widget.getBounds();
final Rectangle newBounds = Geometry.copy(initialBounds);
exercise(new TestRunnable() {
public void run() {
for (int xIteration = 0; xIteration < xIterations; xIteration++) {
processEvents();
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;
newBounds.width = xSize;
newBounds.height = ySize;
widget.setBounds(newBounds);
widget.layout(flushState);
}
stopMeasuring();
}
}
});
commitMeasurements();
assertPerformance();
widget.setBounds(initialBounds);
widgetFactory.done();
}
}