/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <stddef.h> #include <stdint.h> #include <vector> namespace testing { class Benchmark { public: Benchmark(const char* name, void (*fn)(int)) { Register(name, fn, NULL); } Benchmark(const char* name, void (*fn_range)(int, int)) { Register(name, NULL, fn_range); } Benchmark* Arg(int x); Benchmark* Range(int lo, int hi); const char* Name(); bool ShouldRun(int argc, char* argv[]); void Run(); private: const char* name_; void (*fn_)(int); void (*fn_range_)(int, int); std::vector<int> args_; void Register(const char* name, void (*fn)(int), void (*fn_range)(int, int)); void RunRepeatedlyWithArg(int iterations, int arg); void RunWithArg(int arg); }; } // namespace testing void SetBenchmarkFlopsProcessed(int64_t); void StopBenchmarkTiming(); void StartBenchmarkTiming(); #define BENCHMARK(f) \ static ::testing::Benchmark* _benchmark_##f __attribute__((unused)) = \ (new ::testing::Benchmark(#f, f))