| /******************************************************************************* |
| * Copyright (c) 2000, 2017 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 |
| *******************************************************************************/ |
| package org.eclipse.core.tests.resources.perf; |
| |
| import junit.framework.Test; |
| import junit.framework.TestSuite; |
| import org.eclipse.core.resources.*; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.tests.harness.PerformanceTestRunner; |
| import org.eclipse.core.tests.resources.ResourceTest; |
| |
| public class MarkerPerformanceTest extends ResourceTest { |
| IProject project; |
| IFile file; |
| IMarker[] markers; |
| final int NUM_MARKERS = 5000; |
| final int REPEAT = 100; |
| |
| /** |
| * No-arg constructor to satisfy test harness. |
| */ |
| public MarkerPerformanceTest() { |
| super(); |
| } |
| |
| /** |
| * Standard test case constructor |
| */ |
| public MarkerPerformanceTest(String testName) { |
| super(testName); |
| } |
| |
| public static Test suite() { |
| return new TestSuite(MarkerPerformanceTest.class); |
| // TestSuite suite = new TestSuite(MarkerPerformanceTest.class.getName()); |
| // suite.addTest(new MarkerPerformanceTest("benchSetAttributes1")); |
| // suite.addTest(new MarkerPerformanceTest("benchSetAttributes2")); |
| // return suite; |
| } |
| |
| public void testSetAttributes1() { |
| //benchmark setting many attributes in a single operation |
| final IWorkspaceRunnable runnable = monitor -> { |
| //set all attributes for each marker |
| for (int i = 0; i < NUM_MARKERS; i++) { |
| for (int j = 0; j < REPEAT; j++) { |
| markers[i].setAttribute("attrib", "hello"); |
| } |
| } |
| }; |
| PerformanceTestRunner runner = new PerformanceTestRunner() { |
| @Override |
| protected void test() { |
| try { |
| getWorkspace().run(runnable, null); |
| } catch (CoreException e) { |
| fail("2.0", e); |
| } |
| } |
| }; |
| runner.setFingerprintName("Set marker attributes"); |
| runner.run(this, 1, 1); |
| } |
| |
| public void testSetAttributes2() { |
| //benchmark setting many attributes in a single operation |
| final IWorkspaceRunnable runnable = monitor -> { |
| //set one attribute per marker, repeat for all attributes |
| for (int j = 0; j < REPEAT; j++) { |
| for (int i = 0; i < NUM_MARKERS; i++) { |
| markers[i].setAttribute("attrib", "hello"); |
| } |
| } |
| }; |
| new PerformanceTestRunner() { |
| @Override |
| protected void test() { |
| try { |
| getWorkspace().run(runnable, null); |
| } catch (CoreException e) { |
| fail("2.0", e); |
| } |
| } |
| }.run(this, 1, 1); |
| } |
| |
| /** |
| * @see ResourceTest#setUp() |
| */ |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| |
| final IMarker[] createdMarkers = new IMarker[NUM_MARKERS]; |
| IWorkspaceRunnable runnable = monitor -> { |
| //create resources |
| project = getWorkspace().getRoot().getProject("TestProject"); |
| project.create(null); |
| project.open(null); |
| file = project.getFile(Path.ROOT.append("file.txt")); |
| file.create(getRandomContents(), true, null); |
| //create markers |
| for (int i = 0; i < NUM_MARKERS; i++) { |
| createdMarkers[i] = file.createMarker(IMarker.BOOKMARK); |
| } |
| }; |
| |
| try { |
| getWorkspace().run(runnable, null); |
| } catch (CoreException e) { |
| fail("1.0", e); |
| } |
| markers = createdMarkers; |
| } |
| |
| /** |
| * @see TestCase#tearDown() |
| */ |
| @Override |
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| project.delete(true, true, null); |
| } |
| } |