12ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Copyright 2009 The RE2 Authors. All Rights Reserved. 22ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Use of this source code is governed by a BSD-style 32ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// license that can be found in the LICENSE file. 42ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 52ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#ifndef RE2_UTIL_BENCHMARK_H__ 62ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define RE2_UTIL_BENCHMARK_H__ 72ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 82ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonnamespace testing { 92ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonstruct Benchmark { 102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson const char* name; 112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson void (*fn)(int); 122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson void (*fnr)(int, int); 132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson int lo; 142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson int hi; 152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson int threadlo; 162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson int threadhi; 172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson void Register(); 192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson Benchmark(const char* name, void (*f)(int)) { Clear(name); fn = f; Register(); } 202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson Benchmark(const char* name, void (*f)(int, int), int l, int h) { Clear(name); fnr = f; lo = l; hi = h; Register(); } 212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson void Clear(const char* n) { name = n; fn = 0; fnr = 0; lo = 0; hi = 0; threadlo = 0; threadhi = 0; } 222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson Benchmark* ThreadRange(int lo, int hi) { threadlo = lo; threadhi = hi; return this; } 232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson}; 242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson} // namespace testing 252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonvoid SetBenchmarkBytesProcessed(long long); 272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonvoid StopBenchmarkTiming(); 282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonvoid StartBenchmarkTiming(); 292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonvoid BenchmarkMemoryUsage(); 302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonvoid SetBenchmarkItemsProcessed(int); 312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonint NumCPUs(); 332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define BENCHMARK(f) \ 352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson ::testing::Benchmark* _benchmark_##f = (new ::testing::Benchmark(#f, f)) 362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define BENCHMARK_RANGE(f, lo, hi) \ 382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson ::testing::Benchmark* _benchmark_##f = \ 392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson (new ::testing::Benchmark(#f, f, lo, hi)) 402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#endif // RE2_UTIL_BENCHMARK_H__ 42