blob: fccf489bd605474012cb6562fbd16bf32d76a14b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.benchmark.byTask.stats;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.benchmark.byTask.tasks.PerfTask;
import org.apache.lucene.benchmark.byTask.utils.Config;
/**
* Test run data points collected as the test proceeds.
*/
public class Points {
// stat points ordered by their start time.
// for now we collect points as TaskStats objects.
// later might optimize to collect only native data.
private ArrayList<TaskStats> points = new ArrayList<>();
private int nextTaskRunNum = 0;
private TaskStats currentStats;
/**
* Create a Points statistics object.
*/
public Points (Config config) {
}
/**
* Return the current task stats.
* the actual task stats are returned, so caller should not modify this task stats.
* @return current {@link TaskStats}.
*/
public List<TaskStats> taskStats () {
return points;
}
/**
* Mark that a task is starting.
* Create a task stats for it and store it as a point.
* @param task the starting task.
* @return the new task stats created for the starting task.
*/
public synchronized TaskStats markTaskStart (PerfTask task, int round) {
TaskStats stats = new TaskStats(task, nextTaskRunNum(), round);
this.currentStats = stats;
points.add(stats);
return stats;
}
public TaskStats getCurrentStats() {
return currentStats;
}
// return next task num
private synchronized int nextTaskRunNum() {
return nextTaskRunNum++;
}
/**
* mark the end of a task
*/
public synchronized void markTaskEnd (TaskStats stats, int count) {
int numParallelTasks = nextTaskRunNum - 1 - stats.getTaskRunNum();
// note: if the stats were cleared, might be that this stats object is
// no longer in points, but this is just ok.
stats.markEnd(numParallelTasks, count);
}
/**
* Clear all data, prepare for more tests.
*/
public void clearData() {
points.clear();
}
}