#!/bin/bash
# SPDX-License-Identifier: GPL-2.0+
#
# Analyze a given results directory for refscale performance measurements.
#
# Usage: kvm-recheck-refscale.sh resdir
#
# Copyright (C) IBM Corporation, 2016
#
# Authors: Paul E. McKenney <paulmck@linux.ibm.com>

i="$1"
if test -d "$i" -a -r "$i"
then
	:
else
	echo Unreadable results directory: $i
	exit 1
fi
PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
. functions.sh

configfile=`echo $i | sed -e 's/^.*\///'`

sed -e 's/^\[[^]]*]//' < $i/console.log | tr -d '\015' |
awk -v configfile="$configfile" '
/^[ 	]*Runs	Time\(ns\) *$/ {
	if (dataphase + 0 == 0) {
		dataphase = 1;
		# print configfile, $0;
	}
	next;
}

/[^ 	]*[0-9][0-9]*	[0-9][0-9]*\.[0-9][0-9]*$/ {
	if (dataphase == 1) {
		# print $0;
		readertimes[++n] = $2;
		sum += $2;
	}
	next;
}

{
	if (dataphase == 1)
		dataphase == 2;
	next;
}

END {
	print configfile " results:";
	newNR = asort(readertimes);
	if (newNR <= 0) {
		print "No refscale records found???"
		exit;
	}
	medianidx = int(newNR / 2);
	if (newNR == medianidx * 2)
		medianvalue = (readertimes[medianidx - 1] + readertimes[medianidx]) / 2;
	else
		medianvalue = readertimes[medianidx];
	points = "Points:";
	for (i = 1; i <= newNR; i++)
		points = points " " readertimes[i];
	print points;
	print "Average reader duration: " sum / newNR " nanoseconds";
	print "Minimum reader duration: " readertimes[1];
	print "Median reader duration: " medianvalue;
	print "Maximum reader duration: " readertimes[newNR];
	print "Computed from refscale printk output.";
}'