| /* |
| * Created by Phil on 04/07/2017. |
| * Copyright 2017 Two Blue Cubes Ltd. All rights reserved. |
| * |
| * Distributed under the Boost Software License, Version 1.0. (See accompanying |
| * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| */ |
| |
| #include "catch_benchmark.h" |
| #include "catch_capture.hpp" |
| #include "catch_interfaces_reporter.h" |
| #include "catch_context.h" |
| |
| namespace Catch { |
| |
| auto BenchmarkLooper::getResolution() -> uint64_t { |
| return getEstimatedClockResolution() * getCurrentContext().getConfig()->benchmarkResolutionMultiple(); |
| } |
| |
| void BenchmarkLooper::reportStart() { |
| getResultCapture().benchmarkStarting( { m_name } ); |
| } |
| auto BenchmarkLooper::needsMoreIterations() -> bool { |
| auto elapsed = m_timer.getElapsedNanoseconds(); |
| |
| // Exponentially increasing iterations until we're confident in our timer resolution |
| if( elapsed < m_resolution ) { |
| m_iterationsToRun *= 10; |
| return true; |
| } |
| |
| getResultCapture().benchmarkEnded( { { m_name }, m_count, elapsed } ); |
| return false; |
| } |
| |
| } // end namespace Catch |