// Copyright Catch2 Authors // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE.txt or copy at // https://www.boost.org/LICENSE_1_0.txt) // SPDX-License-Identifier: BSL-1.0 #include #include #include #include namespace Catch { namespace Benchmark { namespace Detail { Environment measure_environment_default() { return Detail::measure_environment(); } ExecutionPlan prepare_default( const IConfig& cfg, Environment env, BenchmarkFunction&& fun ) { // This mirrors Benchmark::prepare(), but with the // clock fixed so it is instantiated once here in the library. auto min_time = env.clock_resolution.mean * Detail::minimum_ticks; auto run_time = std::max( min_time, std::chrono::duration_cast( cfg.benchmarkWarmupTime() ) ); auto&& test = Detail::run_for_at_least( std::chrono::duration_cast( run_time ), 1, fun ); int new_iters = static_cast( std::ceil( min_time * test.iterations / test.elapsed ) ); return { new_iters, test.elapsed / test.iterations * new_iters * cfg.benchmarkSamples(), CATCH_MOVE( fun ), std::chrono::duration_cast( cfg.benchmarkWarmupTime() ), Detail::warmup_iterations }; } std::vector run_plan_default( ExecutionPlan const& plan, const IConfig& cfg, Environment env ) { return plan.run( cfg, env ); } } // namespace Detail } // namespace Benchmark } // namespace Catch