Index: tools/telemetry/telemetry/benchmark_runner.py |
diff --git a/tools/telemetry/telemetry/benchmark_runner.py b/tools/telemetry/telemetry/benchmark_runner.py |
index 2ed7573164d19b9114a053445b44d1f36d608940..b9fac19887835cdaf9dfe4ec6b71fa0a96afb743 100644 |
--- a/tools/telemetry/telemetry/benchmark_runner.py |
+++ b/tools/telemetry/telemetry/benchmark_runner.py |
@@ -7,6 +7,7 @@ |
Handles benchmark configuration, but all the logic for |
actually running the benchmark is in Benchmark and PageRunner.""" |
+import difflib |
import hashlib |
import inspect |
import json |
@@ -66,6 +67,32 @@ def PrintBenchmarkList(benchmarks, possible_browser, output_pipe=sys.stdout): |
print >> output_pipe |
+def GetMostLikelyMatchedBenchmarks(all_benchmarks, input_benchmark_name): |
+ """ Returns the list of benchmarks whose name most likely matched with |
+ |input_benchmark_name|. |
+ |
+ Args: |
+ all_benchmarks: the list of benchmark classes. |
+ input_benchmark_name: a string to be matched against the names of benchmarks |
+ in |all_benchmarks|. |
+ |
+ Returns: |
+ A list of benchmark classes whose name likely matched |
+ |input_benchmark_name|. Benchmark classes are arranged in descending order |
+ of similarity between their names to |input_benchmark_name|. |
+ """ |
+ def MatchedWithBenchmarkInputNameScore(benchmark_class): |
+ return difflib.SequenceMatcher( |
+ isjunk=None, |
+ a=benchmark_class.Name(), b=input_benchmark_name).ratio() |
+ benchmarks_with_similar_names = [ |
+ b for b in all_benchmarks if |
+ MatchedWithBenchmarkInputNameScore(b) > 0.4] |
+ ordered_list = sorted(benchmarks_with_similar_names, |
+ key=MatchedWithBenchmarkInputNameScore, |
+ reverse=True) |
+ return ordered_list |
+ |
class Environment(object): |
"""Contains information about the benchmark runtime environment. |
@@ -200,10 +227,11 @@ class Run(command_line.OptparseCommand): |
@classmethod |
def ProcessCommandLineArgs(cls, parser, args, environment): |
+ all_benchmarks = _Benchmarks(environment) |
if not args.positional_args: |
possible_browser = ( |
browser_finder.FindBrowser(args) if args.browser_type else None) |
- PrintBenchmarkList(_Benchmarks(environment), possible_browser) |
+ PrintBenchmarkList(all_benchmarks, possible_browser) |
sys.exit(-1) |
input_benchmark_name = args.positional_args[0] |
@@ -211,7 +239,11 @@ class Run(command_line.OptparseCommand): |
if not matching_benchmarks: |
print >> sys.stderr, 'No benchmark named "%s".' % input_benchmark_name |
print >> sys.stderr |
- PrintBenchmarkList(_Benchmarks(environment), None, sys.stderr) |
+ most_likely_matched_benchmarks = GetMostLikelyMatchedBenchmarks( |
+ all_benchmarks, input_benchmark_name) |
+ if most_likely_matched_benchmarks: |
+ print >> sys.stderr, 'Do you mean any of those benchmarks below?' |
+ PrintBenchmarkList(most_likely_matched_benchmarks, None, sys.stderr) |
sys.exit(-1) |
if len(matching_benchmarks) > 1: |