# Copyright 2020 Google Inc. All rights reserved. # # Licensed 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. """Python benchmarking utilities. Example usage: import google_benchmark as benchmark @benchmark.register def my_benchmark(state): ... # Code executed outside `while` loop is not timed. while state: ... # Code executed within `while` loop is timed. if __name__ == '__main__': benchmark.main() """ from absl import app from google_benchmark import _benchmark from google_benchmark._benchmark import Counter __all__ = [ "register", "main", "Counter", ] __version__ = "0.1.0" def register(f=None, *, name=None): if f is None: return lambda f: register(f, name=name) if name is None: name = f.__name__ _benchmark.RegisterBenchmark(name, f) return f def _flags_parser(argv): argv = _benchmark.Initialize(argv) return app.parse_flags_with_usage(argv) def _run_benchmarks(argv): if len(argv) > 1: raise app.UsageError("Too many command-line arguments.") return _benchmark.RunSpecifiedBenchmarks() def main(argv=None): return app.run(_run_benchmarks, argv=argv, flags_parser=_flags_parser) # Methods for use with custom main function. initialize = _benchmark.Initialize run_benchmarks = _benchmark.RunSpecifiedBenchmarks