| /******************************************************************************* |
| * Copyright (c) 2000, 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.team.tests.ccvs.ui.benchmark; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.zip.ZipException; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.team.core.TeamException; |
| import org.eclipse.team.core.subscribers.Subscriber; |
| import org.eclipse.team.tests.ccvs.core.EclipseTest; |
| import org.eclipse.team.tests.ccvs.core.subscriber.SyncInfoSource; |
| import org.eclipse.team.tests.ccvs.ui.SynchronizeViewTestAdapter; |
| import org.eclipse.test.performance.Dimension; |
| import org.eclipse.test.performance.Performance; |
| import org.eclipse.test.performance.PerformanceMeter; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.WorkbenchException; |
| import org.eclipse.ui.internal.CloseAllPerspectivesAction; |
| |
| /** |
| * Benchmark test superclass |
| */ |
| public abstract class BenchmarkTest extends EclipseTest { |
| |
| private HashMap groups; |
| private PerformanceMeter currentMeter; |
| private static SyncInfoSource source = new SynchronizeViewTestAdapter(); |
| |
| protected BenchmarkTest() { |
| } |
| |
| protected BenchmarkTest(String name) { |
| super(name); |
| } |
| |
| protected IProject createUniqueProject(File zipFile) throws TeamException, CoreException, ZipException, IOException, InterruptedException, InvocationTargetException { |
| return createAndImportProject(getName(), zipFile); |
| } |
| |
| protected IProject createAndImportProject(String prefix, File zipFile) throws TeamException, CoreException, ZipException, IOException, InterruptedException, InvocationTargetException { |
| // create a project with no contents |
| IProject project = getUniqueTestProject(prefix); |
| Util.importZip(project, zipFile); |
| return project; |
| } |
| |
| /** |
| * @param string |
| */ |
| protected void startTask(String string) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| /** |
| * |
| */ |
| protected void endTask() { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| /** |
| * Create a set of perforance meters that can be started with the |
| * startGroup method. |
| * @param performance_groups |
| */ |
| protected void setupGroups(String[] performance_groups) { |
| setupGroups(performance_groups, null, false); |
| } |
| |
| protected void setupGroups(String[] performance_groups, String globalName, boolean global) { |
| groups = new HashMap(); |
| Performance perf = Performance.getDefault(); |
| PerformanceMeter meter = null; |
| if (global) { |
| // Use one meter for all groups - provides a single timing result |
| meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this)); |
| for (int i = 0; i < performance_groups.length; i++) { |
| String suffix = performance_groups[i]; |
| groups.put(suffix, meter); |
| } |
| perf.tagAsGlobalSummary(meter, globalName, Dimension.ELAPSED_PROCESS); |
| } else { |
| // Use a meter for each group, provides fine grain results |
| for (int i = 0; i < performance_groups.length; i++) { |
| String suffix = performance_groups[i]; |
| meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(this) + suffix); |
| groups.put(suffix, meter); |
| if (globalName != null) { |
| perf.tagAsSummary(meter, suffix, Dimension.ELAPSED_PROCESS); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Commit the performance meters that were created by setupGroups and |
| * started and stoped using startGroup/endGroup |
| */ |
| protected void commitGroups(boolean global) { |
| for (Iterator iter = groups.values().iterator(); iter.hasNext();) { |
| PerformanceMeter meter = (PerformanceMeter) iter.next(); |
| meter.commit(); |
| if(global) |
| break; |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.team.tests.ccvs.core.EclipseTest#tearDown() |
| */ |
| protected void tearDown() throws Exception { |
| try { |
| if (groups != null) { |
| Performance perf = Performance.getDefault(); |
| try { |
| for (Iterator iter = groups.values().iterator(); iter.hasNext();) { |
| PerformanceMeter meter = (PerformanceMeter) iter.next(); |
| perf.assertPerformance(meter); |
| } |
| } finally { |
| for (Iterator iter = groups.values().iterator(); iter.hasNext();) { |
| PerformanceMeter meter = (PerformanceMeter) iter.next(); |
| meter.dispose(); |
| } |
| } |
| groups = null; |
| } |
| } finally { |
| super.tearDown(); |
| } |
| } |
| |
| /** |
| * Start the meter that was created for the given key |
| * @param string |
| */ |
| protected void startGroup(String key) { |
| assertNull(currentMeter); |
| currentMeter = (PerformanceMeter)groups.get(key); |
| currentMeter.start(); |
| } |
| |
| /** |
| * End the current meter |
| */ |
| protected void endGroup() { |
| currentMeter.stop(); |
| currentMeter = null; |
| } |
| |
| protected void disableLog() { |
| // TODO: |
| } |
| |
| protected void enableLog() { |
| // TODO: |
| } |
| |
| protected void syncResources(SyncInfoSource source, Subscriber subscriber, IResource[] resources) throws TeamException { |
| startTask("Synchronize with Repository action"); |
| source.refresh(subscriber, resources); |
| endTask(); |
| } |
| |
| /** |
| * @param resources |
| * @param string |
| * @throws CoreException |
| * @throws TeamException |
| */ |
| protected void syncCommitResources(SyncInfoSource source, IResource[] resources, String comment) throws TeamException, CoreException { |
| startTask("Synchronize outgoing changes"); |
| syncResources(source, source.createWorkspaceSubscriber(), resources); |
| endTask(); |
| // TODO: Commit all outgoing changes that are children of the given resource |
| // by extracting them from the subscriber sync set |
| startTask("Commit outgoing changes"); |
| commitResources(resources, IResource.DEPTH_INFINITE); |
| endTask(); |
| } |
| |
| /** |
| * @param resources |
| * @throws TeamException |
| */ |
| protected void syncUpdateResources(SyncInfoSource source, IResource[] resources) throws TeamException { |
| startTask("Synchronize incoming changes"); |
| syncResources(source, source.createWorkspaceSubscriber(), resources); |
| endTask(); |
| // TODO: Update all incoming changes that are children of the given resource |
| // by extracting them from the subscriber sync set |
| startTask("Update incoming changes"); |
| updateResources(resources, false); |
| endTask(); |
| } |
| |
| protected void openEmptyPerspective() throws WorkbenchException { |
| // First close any open perspectives |
| new CloseAllPerspectivesAction(PlatformUI.getWorkbench().getActiveWorkbenchWindow()); |
| // Now open our empty perspective |
| PlatformUI.getWorkbench().showPerspective("org.eclipse.team.tests.cvs.ui.perspective1", PlatformUI.getWorkbench().getActiveWorkbenchWindow()); |
| } |
| } |