| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ML_BENCHMARK_BENCHMARK_H_ |
| #define ML_BENCHMARK_BENCHMARK_H_ |
| |
| #include "proto/benchmark_config.pb.h" |
| |
| namespace ml_benchmark { |
| |
| class Benchmark { |
| public: |
| // Executes an ML Benchmark |
| // To implement a new ML benchmark |
| // Either |
| // - Implement a class that inherits this interface |
| // - Follow the binary specifications to implement a shared library |
| // Benchmark and use the `SharedLibraryBenchmark` class |
| // |
| // Params: |
| // `config`: The benchmark loader will provide a benchmark configuration |
| // in the format specified by the protobuf object which should |
| // contain the benchmark-specific configurations required to |
| // execute the benchmark. |
| // The benchmark should read the relevant config and execute |
| // accordingly. |
| // returns: |
| // `results`: The benchmark is expected to provide the results of the |
| // benchmark in the return protobuf. |
| // If the benchmark executed but encountered an error, the |
| // error should be returned in the protobuf. |
| // return: The return value indicates if the benchmark was able to |
| // execute and return a result. |
| // A successful execution should: |
| // - return true |
| // - The status inside the result should be `ml_benchmark::OK` |
| virtual bool ExecuteBenchmark( |
| const chrome::ml_benchmark::CrOSBenchmarkConfig& config, |
| chrome::ml_benchmark::BenchmarkResults* results) = 0; |
| virtual ~Benchmark() = default; |
| }; |
| |
| } // namespace ml_benchmark |
| |
| #endif // ML_BENCHMARK_BENCHMARK_H_ |