1*ccdc9c3eSSadaf Ebrahimi // Copyright 2009 The RE2 Authors. All Rights Reserved. 2*ccdc9c3eSSadaf Ebrahimi // Use of this source code is governed by a BSD-style 3*ccdc9c3eSSadaf Ebrahimi // license that can be found in the LICENSE file. 4*ccdc9c3eSSadaf Ebrahimi 5*ccdc9c3eSSadaf Ebrahimi #ifndef UTIL_BENCHMARK_H_ 6*ccdc9c3eSSadaf Ebrahimi #define UTIL_BENCHMARK_H_ 7*ccdc9c3eSSadaf Ebrahimi 8*ccdc9c3eSSadaf Ebrahimi #include <stdint.h> 9*ccdc9c3eSSadaf Ebrahimi 10*ccdc9c3eSSadaf Ebrahimi namespace testing { 11*ccdc9c3eSSadaf Ebrahimi struct Benchmark { 12*ccdc9c3eSSadaf Ebrahimi const char* name; 13*ccdc9c3eSSadaf Ebrahimi void (*fn)(int); 14*ccdc9c3eSSadaf Ebrahimi void (*fnr)(int, int); 15*ccdc9c3eSSadaf Ebrahimi int lo; 16*ccdc9c3eSSadaf Ebrahimi int hi; 17*ccdc9c3eSSadaf Ebrahimi int threadlo; 18*ccdc9c3eSSadaf Ebrahimi int threadhi; 19*ccdc9c3eSSadaf Ebrahimi 20*ccdc9c3eSSadaf Ebrahimi void Register(); BenchmarkBenchmark21*ccdc9c3eSSadaf Ebrahimi Benchmark(const char* name, void (*f)(int)) { Clear(name); fn = f; Register(); } BenchmarkBenchmark22*ccdc9c3eSSadaf Ebrahimi Benchmark(const char* name, void (*f)(int, int), int l, int h) { Clear(name); fnr = f; lo = l; hi = h; Register(); } ClearBenchmark23*ccdc9c3eSSadaf Ebrahimi void Clear(const char* n) { name = n; fn = 0; fnr = 0; lo = 0; hi = 0; threadlo = 0; threadhi = 0; } ThreadRangeBenchmark24*ccdc9c3eSSadaf Ebrahimi Benchmark* ThreadRange(int lo, int hi) { threadlo = lo; threadhi = hi; return this; } 25*ccdc9c3eSSadaf Ebrahimi }; 26*ccdc9c3eSSadaf Ebrahimi } // namespace testing 27*ccdc9c3eSSadaf Ebrahimi 28*ccdc9c3eSSadaf Ebrahimi void SetBenchmarkBytesProcessed(int64_t); 29*ccdc9c3eSSadaf Ebrahimi void StopBenchmarkTiming(); 30*ccdc9c3eSSadaf Ebrahimi void StartBenchmarkTiming(); 31*ccdc9c3eSSadaf Ebrahimi void BenchmarkMemoryUsage(); 32*ccdc9c3eSSadaf Ebrahimi void SetBenchmarkItemsProcessed(int); 33*ccdc9c3eSSadaf Ebrahimi 34*ccdc9c3eSSadaf Ebrahimi int NumCPUs(); 35*ccdc9c3eSSadaf Ebrahimi 36*ccdc9c3eSSadaf Ebrahimi #define BENCHMARK(f) \ 37*ccdc9c3eSSadaf Ebrahimi ::testing::Benchmark* _benchmark_##f = (new ::testing::Benchmark(#f, f)) 38*ccdc9c3eSSadaf Ebrahimi 39*ccdc9c3eSSadaf Ebrahimi #define BENCHMARK_RANGE(f, lo, hi) \ 40*ccdc9c3eSSadaf Ebrahimi ::testing::Benchmark* _benchmark_##f = \ 41*ccdc9c3eSSadaf Ebrahimi (new ::testing::Benchmark(#f, f, lo, hi)) 42*ccdc9c3eSSadaf Ebrahimi 43*ccdc9c3eSSadaf Ebrahimi #endif // UTIL_BENCHMARK_H_ 44