1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/******************************************************************************* 2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors 3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials 4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0 5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at 6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html 7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors: 9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Marc R. Hoffmann - initial API and implementation 10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/ 12e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpackage org.jacoco.core.test.perf; 13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 14ac07e252571819685d3f74cb69c90c23abd340a0Marc R. Hoffmannimport java.util.concurrent.Callable; 15ac07e252571819685d3f74cb69c90c23abd340a0Marc R. Hoffmann 16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.analysis.Analyzer; 17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.analysis.IClassCoverage; 18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.analysis.ICoverageVisitor; 19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.data.ExecutionDataStore; 20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.test.TargetLoader; 21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/** 23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Scenario to measure the time taken by the instrumentation process itself. 24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic class AnalysisTimeScenario extends TimedScenario { 26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private final Class<?> target; 28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private final int count; 30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected AnalysisTimeScenario(Class<?> target, int count) { 32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov super(String.format("analysing %s classes", Integer.valueOf(count))); 33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov this.target = target; 34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov this.count = count; 35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Override 38ac07e252571819685d3f74cb69c90c23abd340a0Marc R. Hoffmann protected Callable<Void> getInstrumentedCallable() throws Exception { 39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final byte[] bytes = TargetLoader.getClassDataAsBytes(target); 40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final ExecutionDataStore executionData = new ExecutionDataStore(); 41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov ICoverageVisitor visitor = new ICoverageVisitor() { 42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void visitCoverage(IClassCoverage coverage) { 43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov }; 45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final Analyzer analyzer = new Analyzer(executionData, visitor); 46ac07e252571819685d3f74cb69c90c23abd340a0Marc R. Hoffmann return new Callable<Void>() { 47ac07e252571819685d3f74cb69c90c23abd340a0Marc R. Hoffmann public Void call() throws Exception { 48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov for (int i = 0; i < count; i++) { 49ac07e252571819685d3f74cb69c90c23abd340a0Marc R. Hoffmann analyzer.analyzeClass(bytes, target.getName()); 50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 51ac07e252571819685d3f74cb69c90c23abd340a0Marc R. Hoffmann return null; 52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov }; 54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov} 56