blob: 75c1575d6b0caaa955631dc88a1e7e062250a451 [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();
}
}