1*bf2c3715SXin Li /* 2*bf2c3715SXin Li * Copyright (C) 2012 The Android Open Source Project 3*bf2c3715SXin Li * 4*bf2c3715SXin Li * Licensed under the Apache License, Version 2.0 (the "License"); 5*bf2c3715SXin Li * you may not use this file except in compliance with the License. 6*bf2c3715SXin Li * You may obtain a copy of the License at 7*bf2c3715SXin Li * 8*bf2c3715SXin Li * http://www.apache.org/licenses/LICENSE-2.0 9*bf2c3715SXin Li * 10*bf2c3715SXin Li * Unless required by applicable law or agreed to in writing, software 11*bf2c3715SXin Li * distributed under the License is distributed on an "AS IS" BASIS, 12*bf2c3715SXin Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*bf2c3715SXin Li * See the License for the specific language governing permissions and 14*bf2c3715SXin Li * limitations under the License. 15*bf2c3715SXin Li */ 16*bf2c3715SXin Li #include <stddef.h> 17*bf2c3715SXin Li #include <stdint.h> 18*bf2c3715SXin Li #include <vector> 19*bf2c3715SXin Li 20*bf2c3715SXin Li namespace testing { 21*bf2c3715SXin Li class Benchmark { 22*bf2c3715SXin Li public: Benchmark(const char * name,void (* fn)(int))23*bf2c3715SXin Li Benchmark(const char* name, void (*fn)(int)) { 24*bf2c3715SXin Li Register(name, fn, NULL); 25*bf2c3715SXin Li } Benchmark(const char * name,void (* fn_range)(int,int))26*bf2c3715SXin Li Benchmark(const char* name, void (*fn_range)(int, int)) { 27*bf2c3715SXin Li Register(name, NULL, fn_range); 28*bf2c3715SXin Li } 29*bf2c3715SXin Li Benchmark* Arg(int x); 30*bf2c3715SXin Li Benchmark* Range(int lo, int hi); 31*bf2c3715SXin Li const char* Name(); 32*bf2c3715SXin Li bool ShouldRun(int argc, char* argv[]); 33*bf2c3715SXin Li void Run(); 34*bf2c3715SXin Li private: 35*bf2c3715SXin Li const char* name_; 36*bf2c3715SXin Li void (*fn_)(int); 37*bf2c3715SXin Li void (*fn_range_)(int, int); 38*bf2c3715SXin Li std::vector<int> args_; 39*bf2c3715SXin Li void Register(const char* name, void (*fn)(int), void (*fn_range)(int, int)); 40*bf2c3715SXin Li void RunRepeatedlyWithArg(int iterations, int arg); 41*bf2c3715SXin Li void RunWithArg(int arg); 42*bf2c3715SXin Li }; 43*bf2c3715SXin Li } // namespace testing 44*bf2c3715SXin Li void SetBenchmarkFlopsProcessed(int64_t); 45*bf2c3715SXin Li void StopBenchmarkTiming(); 46*bf2c3715SXin Li void StartBenchmarkTiming(); 47*bf2c3715SXin Li #define BENCHMARK(f) \ 48*bf2c3715SXin Li static ::testing::Benchmark* _benchmark_##f __attribute__((unused)) = \ 49*bf2c3715SXin Li (new ::testing::Benchmark(#f, f)) 50