blob: 35ea35a068cf434ee871b883b5a57ada0b2ec8d9 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2012 itemis 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:
* itemis - Initial API and implementation
*
* </copyright>
*/
package org.eclipse.sphinx.tests.platform.perfs;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.Assert;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.sphinx.platform.perfs.Measurement;
import org.eclipse.sphinx.platform.perfs.PerfsFactory;
import org.eclipse.sphinx.platform.perfs.services.ModelPersistenceService;
public class PerfStatsExample {
private File perfsModel;
public PerfStatsExample(File perfsModel) {
this.perfsModel = perfsModel;
}
/**
* Returns the resource behind the {@link #getPerfsModel() performance model}. If the performance model file does
* not exist then we create a new one.
*
* @return the resource behind the {@link #getPerfsModel() performance model}.
*/
public Resource getPerfsModelResource() {
Assert.isNotNull(perfsModel);
if (!perfsModel.exists()) {
return ModelPersistenceService.INSTANCE.createResource(perfsModel);
}
return ModelPersistenceService.INSTANCE.getResource(perfsModel);
}
/**
* @return the performance model file.
*/
public File getPerfsModel() {
return perfsModel;
}
/**
* Returns all performance measurements.
*/
public Collection<Measurement> getPerfMeasurements() {
Set<Measurement> measurements = new HashSet<Measurement>();
Measurement method1Measurement = PerfsFactory.eINSTANCE.createMeasurement();
method1Measurement.setName("Method 1 Call"); //$NON-NLS-1$
method1Measurement.start();
method1();
method1Measurement.stop();
measurements.add(method1Measurement);
Measurement method2Measurement = PerfsFactory.eINSTANCE.createMeasurement();
method2Measurement.setName("Method 2 Call"); //$NON-NLS-1$
method2Measurement.start();
method2();
method2Measurement.stop();
measurements.add(method2Measurement);
return measurements;
}
/*
* A sample method performing a time loop . Effective waiting time may defer from the value provide in argument.
* @param timeOut value of the timeLoop in millisecond.
*/
private void timeLoop(long timeOut) {
long currentCpuTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
while (ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime() <= currentCpuTime + timeOut * (long) 1e6) {
}
}
public void method1() {
timeLoop(1000);
}
public void method2() {
timeLoop(2000);
}
public void method3() {
timeLoop(3000);
}
}