mirror of https://github.com/procxx/kepka.git
				
				
				
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  *  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)
 | |
|  */
 | |
| #ifndef TWOBLUECUBES_CATCH_BENCHMARK_H_INCLUDED
 | |
| #define TWOBLUECUBES_CATCH_BENCHMARK_H_INCLUDED
 | |
| 
 | |
| #include "catch_stringref.h"
 | |
| #include "catch_timer.h"
 | |
| 
 | |
| #include <cstdint>
 | |
| #include <string>
 | |
| 
 | |
| namespace Catch {
 | |
| 
 | |
|     class BenchmarkLooper {
 | |
| 
 | |
|         std::string m_name;
 | |
|         std::size_t m_count = 0;
 | |
|         std::size_t m_iterationsToRun = 1;
 | |
|         uint64_t m_resolution;
 | |
|         Timer m_timer;
 | |
| 
 | |
|         static auto getResolution() -> uint64_t;
 | |
|     public:
 | |
|         // Keep most of this inline as it's on the code path that is being timed
 | |
|         BenchmarkLooper( StringRef name )
 | |
|         :   m_name( name ),
 | |
|             m_resolution( getResolution() )
 | |
|         {
 | |
|             reportStart();
 | |
|             m_timer.start();
 | |
|         }
 | |
| 
 | |
|         explicit operator bool() {
 | |
|             if( m_count < m_iterationsToRun )
 | |
|                 return true;
 | |
|             return needsMoreIterations();
 | |
|         }
 | |
| 
 | |
|         void increment() {
 | |
|             ++m_count;
 | |
|         }
 | |
| 
 | |
|         void reportStart();
 | |
|         auto needsMoreIterations() -> bool;
 | |
|     };
 | |
| 
 | |
| } // end namespace Catch
 | |
| 
 | |
| #define BENCHMARK( name ) \
 | |
|     for( Catch::BenchmarkLooper looper( name ); looper; looper.increment() )
 | |
| 
 | |
| #endif // TWOBLUECUBES_CATCH_BENCHMARK_H_INCLUDED
 |