| #!/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 ); |
| } |
| |