org.openjdk.jmh.results.IterationResult Maven / Gradle / Ivy
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.openjdk.jmh.results;
import org.openjdk.jmh.infra.BenchmarkParams;
import org.openjdk.jmh.infra.IterationParams;
import org.openjdk.jmh.util.Multimap;
import org.openjdk.jmh.util.TreeMultimap;
import java.io.Serializable;
import java.util.*;
/**
* Class contains all info returned by benchmark iteration or/and collected during benchmark iteration.
*/
public class IterationResult implements Serializable {
private static final long serialVersionUID = 960397066774710819L;
private static final Multimap EMPTY_MAP = new TreeMultimap<>();
private static final List EMPTY_LIST = Collections.emptyList();
private final BenchmarkParams benchmarkParams;
private final IterationParams params;
private final IterationResultMetaData metadata;
private Collection primaryResults;
private Multimap secondaryResults;
public IterationResult(BenchmarkParams benchmarkParams, IterationParams params, IterationResultMetaData md) {
this.benchmarkParams = benchmarkParams;
this.params = params;
this.metadata = md;
this.primaryResults = EMPTY_LIST;
this.secondaryResults = EMPTY_MAP;
}
public IterationResultMetaData getMetadata() {
return metadata;
}
public void addResults(Collection extends Result> rs) {
for (Result r : rs) {
addResult(r);
}
}
public void addResult(Result result) {
if (result.getRole().isPrimary()) {
if (primaryResults == EMPTY_LIST) {
primaryResults = Collections.singleton(result);
} else if (primaryResults.size() == 1) {
List newResults = new ArrayList<>(2);
newResults.addAll(primaryResults);
newResults.add(result);
primaryResults = newResults;
} else {
primaryResults.add(result);
}
}
if (result.getRole().isSecondary()) {
if (secondaryResults == EMPTY_MAP) {
secondaryResults = new TreeMultimap<>();
}
secondaryResults.put(result.getLabel(), result);
}
}
public Collection getRawPrimaryResults() {
return primaryResults;
}
public Multimap getRawSecondaryResults() {
return secondaryResults;
}
public Map getSecondaryResults() {
Map answer = new TreeMap<>();
for (String label : secondaryResults.keys()) {
Collection results = secondaryResults.get(label);
Result next = results.iterator().next();
@SuppressWarnings("unchecked")
Aggregator aggregator = next.getThreadAggregator();
Result result = aggregator.aggregate(results);
answer.put(label, result);
}
// put all secondary derivative results on top: from primaries
answer.putAll(produceDerivative(getPrimaryResult()));
// add all secondary derivative results on top: from secondaries
Map adds = new HashMap<>();
for (Result r : answer.values()) {
adds.putAll(produceDerivative(r));
}
answer.putAll(adds);
return answer;
}
private Map produceDerivative(Result r) {
Map map = new HashMap<>();
for (Object rr : r.getDerivativeResults()) {
map.put(((Result) rr).getLabel(), (Result) rr);
}
return map;
}
public Result getPrimaryResult() {
@SuppressWarnings("unchecked")
Aggregator aggregator = primaryResults.iterator().next().getThreadAggregator();
return aggregator.aggregate(primaryResults);
}
public IterationParams getParams() {
return params;
}
public BenchmarkParams getBenchmarkParams() {
return benchmarkParams;
}
public String getScoreUnit() {
return getPrimaryResult().getScoreUnit();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy