+++ /dev/null
-package org.apache.lucene.benchmark.byTask.stats;
-
-/**
- * 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.
- */
-
-import org.apache.lucene.benchmark.byTask.tasks.PerfTask;
-
-/**
- * Statistics for a task run.
- * <br>The same task can run more than once, but, if that task records statistics,
- * each run would create its own TaskStats.
- */
-public class TaskStats implements Cloneable {
-
- /** task for which data was collected */
- private PerfTask task;
-
- /** round in which task run started */
- private int round;
-
- /** task start time */
- private long start;
-
- /** task elapsed time. elapsed >= 0 indicates run completion! */
- private long elapsed = -1;
-
- /** max tot mem during task */
- private long maxTotMem;
-
- /** max used mem during task */
- private long maxUsedMem;
-
- /** serial run number of this task run in the perf run */
- private int taskRunNum;
-
- /** number of other tasks that started to run while this task was still running */
- private int numParallelTasks;
-
- /** number of work items done by this task.
- * For indexing that can be number of docs added.
- * For warming that can be number of scanned items, etc.
- * For repeating tasks, this is a sum over repetitions.
- */
- private int count;
-
- /** Number of similar tasks aggregated into this record.
- * Used when summing up on few runs/instances of similar tasks.
- */
- private int numRuns = 1;
-
- /**
- * Create a run data for a task that is starting now.
- * To be called from Points.
- */
- TaskStats (PerfTask task, int taskRunNum, int round) {
- this.task = task;
- this.taskRunNum = taskRunNum;
- this.round = round;
- maxTotMem = Runtime.getRuntime().totalMemory();
- maxUsedMem = maxTotMem - Runtime.getRuntime().freeMemory();
- start = System.currentTimeMillis();
- }
-
- /**
- * mark the end of a task
- */
- void markEnd (int numParallelTasks, int count) {
- elapsed = System.currentTimeMillis() - start;
- long totMem = Runtime.getRuntime().totalMemory();
- if (totMem > maxTotMem) {
- maxTotMem = totMem;
- }
- long usedMem = totMem - Runtime.getRuntime().freeMemory();
- if (usedMem > maxUsedMem) {
- maxUsedMem = usedMem;
- }
- this.numParallelTasks = numParallelTasks;
- this.count = count;
- }
-
- private int[] countsByTime;
- private long countsByTimeStepMSec;
-
- public void setCountsByTime(int[] counts, long msecStep) {
- countsByTime = counts;
- countsByTimeStepMSec = msecStep;
- }
-
- public int[] getCountsByTime() {
- return countsByTime;
- }
-
- public long getCountsByTimeStepMSec() {
- return countsByTimeStepMSec;
- }
-
- /**
- * @return the taskRunNum.
- */
- public int getTaskRunNum() {
- return taskRunNum;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- StringBuilder res = new StringBuilder(task.getName());
- res.append(" ");
- res.append(count);
- res.append(" ");
- res.append(elapsed);
- return res.toString();
- }
-
- /**
- * @return Returns the count.
- */
- public int getCount() {
- return count;
- }
-
- /**
- * @return elapsed time.
- */
- public long getElapsed() {
- return elapsed;
- }
-
- /**
- * @return Returns the maxTotMem.
- */
- public long getMaxTotMem() {
- return maxTotMem;
- }
-
- /**
- * @return Returns the maxUsedMem.
- */
- public long getMaxUsedMem() {
- return maxUsedMem;
- }
-
- /**
- * @return Returns the numParallelTasks.
- */
- public int getNumParallelTasks() {
- return numParallelTasks;
- }
-
- /**
- * @return Returns the task.
- */
- public PerfTask getTask() {
- return task;
- }
-
- /**
- * @return Returns the numRuns.
- */
- public int getNumRuns() {
- return numRuns;
- }
-
- /**
- * Add data from another stat, for aggregation
- * @param stat2 the added stat data.
- */
- public void add(TaskStats stat2) {
- numRuns += stat2.getNumRuns();
- elapsed += stat2.getElapsed();
- maxTotMem += stat2.getMaxTotMem();
- maxUsedMem += stat2.getMaxUsedMem();
- count += stat2.getCount();
- if (round != stat2.round) {
- round = -1; // no meaning if aggregating tasks of different round.
- }
-
- if (countsByTime != null && stat2.countsByTime != null) {
- if (countsByTimeStepMSec != stat2.countsByTimeStepMSec) {
- throw new IllegalStateException("different by-time msec step");
- }
- if (countsByTime.length != stat2.countsByTime.length) {
- throw new IllegalStateException("different by-time msec count");
- }
- for(int i=0;i<stat2.countsByTime.length;i++) {
- countsByTime[i] += stat2.countsByTime[i];
- }
- }
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#clone()
- */
- @Override
- public Object clone() throws CloneNotSupportedException {
- TaskStats c = (TaskStats) super.clone();
- if (c.countsByTime != null) {
- c.countsByTime = c.countsByTime.clone();
- }
- return c;
- }
-
- /**
- * @return the round number.
- */
- public int getRound() {
- return round;
- }
-
-}