blob: 8ec1f0ac47037fc06ca540a69153a188d5afed68 [file] [log] [blame]
#!/usr/local/bin/perl
# 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.
use strict;
use warnings;
use lib '../devel/benchmarks/indexers';
use lib 'devel/benchmarks/indexers';
use Getopt::Long;
use Cwd qw( getcwd );
use BenchmarkingIndexer;
# Index all docs and run one iter unless otherwise spec'd.
my ( $num_reps, $max_to_index, $increment, $store, $build_index );
GetOptions(
'reps=s' => \$num_reps,
'docs=s' => \$max_to_index,
'increment=s' => \$increment,
'store=s' => \$store,
'build_index=s' => \$build_index,
);
$num_reps = 1 unless defined $num_reps;
my $bencher = BenchmarkingIndexer::Lucy->new(
docs => $max_to_index,
increment => $increment,
store => $store,
);
if ($build_index) {
my ( $count, $secs ) = $bencher->build_index;
print "docs: $count elapsed: $secs\n";
exit;
}
else {
$bencher->start_report;
my @times;
for my $rep ( 1 .. $num_reps ) {
# Spawn an index-building child process.
my $command = "$^X ";
# Try to figure out if this program was called with -Mblib.
for (@INC) {
next unless /\bblib\b/;
# Propagate -Mblib to the child.
$command .= "-Mblib ";
last;
}
$command .= "$0 --build_index=1 ";
$command .= "--docs=$max_to_index " if $max_to_index;
$command .= "--store=$store " if $store;
$command .= "--increment=$increment " if $increment;
my $output = `$command`;
# Extract elapsed time from the output of the child.
$output =~ /^docs: (\d+) elapsed: ([\d.]+)/
or die "no match: '$output'";
my $docs = $1;
my $secs = $2;
push @times, $secs;
$bencher->print_interim_report(
rep => $rep,
secs => $secs,
count => $docs,
);
}
$bencher->print_final_report( \@times );
}