blob: b4ee9129ac4481d00181d97758249db42b865a84 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 474274
******************************************************************************/
package org.eclipse.e4.core.internal.tests.contexts.performance;
import org.eclipse.core.runtime.IAdapterManager;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.core.tests.harness.PerformanceTestRunner;
import org.eclipse.e4.core.contexts.ContextFunction;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.contexts.RunAndTrack;
import org.eclipse.e4.core.internal.tests.CoreTestsActivator;
import org.eclipse.osgi.service.datalocation.Location;
import org.eclipse.osgi.service.debug.DebugOptions;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
*
*/
public class ContextPerformanceTest extends TestCase {
IEclipseContext parentContext, context;
public static Test suite() {
return new TestSuite(ContextPerformanceTest.class);
// TestSuite suite = new TestSuite();
// suite.addTest(new ContextPerformanceTest("testSetValueRunAndTrack"));
// return suite;
}
public ContextPerformanceTest(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
super.setUp();
parentContext = EclipseContextFactory.getServiceContext(CoreTestsActivator.getDefault().getBundleContext());
context = parentContext.createChild(getName());
// add some values to the contexts
for (int i = 0; i < 100; i++) {
context.set("Value-" + i, Integer.valueOf(i));
}
// do some additional service lookups on non-existent keys
for (int i = 0; i < 1000; i++) {
context.get("NonExistentValue-" + i);
}
// lookup some OSGi services
context.get(DebugOptions.class.getName());
context.get(IAdapterManager.class.getName());
context.get(IExtensionRegistry.class.getName());
context.get(IPreferencesService.class.getName());
context.get(Location.class.getName());
}
public void testLookup() {
new PerformanceTestRunner() {
@Override
protected void test() {
context.get("something");
}
}.run(this, 10, 600000);
}
public void testLookupContextFunction() {
context.set("somefunction", new ContextFunction() {
@Override
public Object compute(IEclipseContext context, String contextKey) {
return "result";
}
});
new PerformanceTestRunner() {
@Override
protected void test() {
context.get("somefunction");
}
}.run(this, 10, 5000000);
}
public void testSetContextFunction() {
context.set("somefunction", new ContextFunction() {
@Override
public Object compute(IEclipseContext context, String contextKey) {
return context.get("something");
}
});
new PerformanceTestRunner() {
int i = 0;
@Override
protected void test() {
context.set("something", "value-" + i++);
}
}.run(this, 10, 600000);
}
/**
* Tests setting a value in a context that a RAT is listening to. This test mimics what occurs
* when handlers change in e4. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=305038
*/
public void testSetValueRunAndTrack() {
context.set("somefunction", new ContextFunction() {
@Override
public Object compute(IEclipseContext context, String contextKey) {
// make sure this function has a large number of dependencies
for (int i = 0; i < 1000; i++) {
context.get("NonExistentValue-" + i);
}
return context.get("something");
}
});
context.runAndTrack(new RunAndTrack() {
@Override
public boolean changed(IEclipseContext context) {
context.get("somefunction");
return true;
}
});
new PerformanceTestRunner() {
int i = 0;
@Override
protected void test() {
context.set("something", "value-" + i++);
}
}.run(this, 10, 400);
}
}