blob: b08e4a2d2e136ae66fdbbcecdca1ceb7e860e842 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 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.jdt.debug.tests.performance;
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.internal.core.BreakpointManager;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.debug.tests.AbstractDebugPerformanceTest;
import org.eclipse.test.performance.Dimension;
import org.eclipse.ui.IEditorPart;
/**
* Tests the performance of various parts of the {@link BreakpointManager}
*
* @since 3.8
*/
public class BreakpointManagerPerfTests extends AbstractDebugPerformanceTest {
/**
* Constructor
* @param name
*/
public BreakpointManagerPerfTests() {
super("Breakpoint Manager Performance");
}
static IBreakpoint[] NO_BREAKPOINTS = new IBreakpoint[0];
static String fgTypeName = "BPManagerPerf";
/**
* Create the given number of breakpoints in the given resource starting from the given line
*
* @param count
* @throws Exception
* @return the collection of breakpoints
*/
IBreakpoint[] generateBreakpoints(int count) throws Exception {
IType type = getType(fgTypeName);
assertNotNull("the type "+fgTypeName+" should exist", type);
assertTrue("The type "+fgTypeName+" must be a file", type.getResource().getType() == IResource.FILE);
IEditorPart editor = openEditor((IFile)type.getResource());
assertNotNull("the editor for "+fgTypeName+" should have been created", editor);
ArrayList<IBreakpoint> bps = new ArrayList<IBreakpoint>(count);
IBreakpoint bp = createClassPrepareBreakpoint(type);
if(bp != null) {
bps.add(bp);
}
bp = createMethodBreakpoint(fgTypeName, "main", Signature.createMethodSignature(new String[] {"[Ljava.lang.String;"}, Signature.SIG_VOID), true, true);
if(bp != null) {
bps.add(bp);
}
int end = 9+count;
for(int i = 11; i < end; i++) {
bp = createLineBreakpoint(i, fgTypeName);
if(bp != null) {
bps.add(bp);
}
}
assertEquals("the should have been "+count+" breakpoints created", count, bps.size());
return bps.toArray(new IBreakpoint[bps.size()]);
}
/**
* Tests the time required to start the {@link BreakpointManager}
* @throws Exception
*/
public void testStartup200Breakpoints() throws Exception {
tagAsSummary("Start Breakpoint Manager - 200 BPs", Dimension.ELAPSED_PROCESS);
try {
IBreakpoint[] bps = generateBreakpoints(200);
assertTrue("There should be 200 breakpoints", bps.length == 200);
BreakpointManager mgr = (BreakpointManager) getBreakpointManager();
//clean it up before starting
mgr.shutdown();
for(int i = 0; i < 6500; i++) {
try {
startMeasuring();
mgr.ensureInitialized();
stopMeasuring();
}
finally {
mgr.shutdown();
}
}
commitMeasurements();
assertPerformance();
}
finally {
removeAllBreakpoints();
}
}
/**
* Tests the time required to start the {@link BreakpointManager}
* @throws Exception
*/
public void testStartup50Breakpoints() throws Exception {
tagAsSummary("Start Breakpoint Manager - 50 BPs", Dimension.ELAPSED_PROCESS);
try {
IBreakpoint[] bps = generateBreakpoints(50);
assertTrue("There should be 50 breakpoints", bps.length == 50);
BreakpointManager mgr = (BreakpointManager) getBreakpointManager();
//clean it up before starting
mgr.shutdown();
for(int i = 0; i < 6500; i++) {
try {
startMeasuring();
mgr.ensureInitialized();
stopMeasuring();
}
finally {
mgr.shutdown();
}
}
commitMeasurements();
assertPerformance();
}
finally {
removeAllBreakpoints();
}
}
/**
* Tests the time required to start the {@link BreakpointManager}
* @throws Exception
*/
public void testStartup100Breakpoints() throws Exception {
tagAsSummary("Start Breakpoint Manager - 100 BPs", Dimension.ELAPSED_PROCESS);
try {
IBreakpoint[] bps = generateBreakpoints(100);
assertTrue("There should be 100 breakpoints", bps.length == 100);
BreakpointManager mgr = (BreakpointManager) getBreakpointManager();
//clean it up before starting
mgr.shutdown();
for(int i = 0; i < 6500; i++) {
try {
startMeasuring();
mgr.ensureInitialized();
stopMeasuring();
}
finally {
mgr.shutdown();
}
}
commitMeasurements();
assertPerformance();
}
finally {
removeAllBreakpoints();
}
}
}