blob: a23d542220d305f287df038c286e8b93479a4c2b [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 SRC_TESTS_BENCHMARKS_FIDL_HLCPP_ENCODE_BENCHMARK_UTIL_H_
#define SRC_TESTS_BENCHMARKS_FIDL_HLCPP_ENCODE_BENCHMARK_UTIL_H_
#include "coding_table.h"
namespace hlcpp_benchmarks {
template <typename BuilderFunc>
bool EncodeBenchmark(perftest::RepeatState* state, BuilderFunc builder) {
using FidlType = std::invoke_result_t<BuilderFunc>;
state->DeclareStep("Setup/WallTime");
state->DeclareStep("Encode/WallTime");
state->DeclareStep("Teardown/WallTime");
while (state->KeepRunning()) {
FidlType obj = builder();
state->NextStep(); // End: Setup. Begin: Encode.
{
fidl::Encoder enc(fidl::Encoder::NoHeader::NO_HEADER);
auto offset = enc.Alloc(fidl::EncodingInlineSize<FidlType, fidl::Encoder>(&enc));
obj.Encode(&enc, offset);
fidl::Message msg = enc.GetMessage();
ZX_ASSERT(ZX_OK == msg.Validate(FidlType::FidlType, nullptr));
}
state->NextStep(); // End: Encode. Begin: Teardown.
}
return true;
}
} // namespace hlcpp_benchmarks
#endif // SRC_TESTS_BENCHMARKS_FIDL_HLCPP_ENCODE_BENCHMARK_UTIL_H_