// 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_FUNCTIONS_H_
#define ML_BENCHMARK_BENCHMARK_FUNCTIONS_H_

namespace ml_benchmark {

// This class models the shared library interface specified in the
// ML Benchmark Suite design documents.
// Each function in the interface corresponds to a function that each
// shared library benchmark driver must implement.
// Refer to the design document for more details on the shared library API
// contracts.
class BenchmarkFunctions {
 public:
  virtual ~BenchmarkFunctions() = default;

  // Executes the benchmark
  // Params
  // `config_bytes`:      A buffer which contains the serialized configuration
  //                      protobuf.
  //                      Refer to `benchmark.h` for more details on the config
  //                      format.
  // `config_bytes_size`: The length of the `config_bytes` buffer.
  // returns:             Indicates how the benchmark executed.
  //                      Return values should be identical to the `status`
  //                      field in the return results.
  //                      0 indicates the execution was successful.
  // `results_bytes`:     The benchmark is expected to return a pointer to a
  //                      buffer which contains the serialized results protobuf.
  //                      The benchmark might not return a value if an error
  //                      occurs.
  // `results_bytes_size`:The length of the results_bytes array.
  virtual int32_t BenchmarkFunction(const void* config_bytes,
                                    int32_t config_bytes_size,
                                    void** results_bytes,
                                    int32_t* results_bytes_size) = 0;

  // Frees the benchmark results allocated by BenchmarkFunction.
  // If nullptr was passed in, the free function will do nothing.
  // Params
  // `memory`: The same results_bytes pointer obtained from BenchmarkFunction.
  virtual void FreeBenchmarkResults(void* memory) = 0;
};

}  // namespace ml_benchmark

#endif  // ML_BENCHMARK_BENCHMARK_FUNCTIONS_H_
