benchmark: benchmark ImmediateFuture::thenValue exception case

Summary:
This case shows up when profiling Buck builds, let's add a benchmark to measure
the improvements made to it.

Reviewed By: fanzeyi

Differential Revision: D31655224

fbshipit-source-id: 8a4248160bafe5e56829bb896866e8ad7b97ba79
This commit is contained in:
Xavier Deguillard 2021-10-15 09:25:54 -07:00 committed by Facebook GitHub Bot
parent bf80d78e16
commit fe1a6e2754

View File

@ -22,6 +22,19 @@ void immediate_future(benchmark::State& state) {
state.SetItemsProcessed(std::move(fut).get());
}
void immediate_future_exc(benchmark::State& state) {
ImmediateFuture<uint64_t> fut{folly::Try<uint64_t>{std::logic_error("Foo")}};
uint64_t processed = 0;
for (auto _ : state) {
auto newFut = std::move(fut).thenValue([](uint64_t v) { return v + 1; });
fut = std::move(newFut);
processed++;
}
benchmark::DoNotOptimize(fut);
state.SetItemsProcessed(processed);
}
void folly_future(benchmark::State& state) {
folly::Future<int> fut{0};
for (auto _ : state) {
@ -32,6 +45,7 @@ void folly_future(benchmark::State& state) {
}
BENCHMARK(immediate_future);
BENCHMARK(immediate_future_exc);
BENCHMARK(folly_future);
} // namespace