blob: 79fc7d6dbbfb57ebe3b3db4c030d3b54482c8801 [file]
#include <benchmark/benchmark.h>
#include "TransactionCallbackInvoker.h"
namespace android::surfaceflinger {
static void TransactionCallbackInvoker_sendCallbacks(benchmark::State& state) {
TransactionCallbackInvoker invoker;
size_t numCallbacks = static_cast<size_t>(state.range(0));
std::vector<sp<BBinder>> listeners;
std::vector<sp<BBinder>> surfaceControls;
std::vector<std::vector<CallbackId>> callbackIds;
listeners.reserve(numCallbacks);
surfaceControls.reserve(numCallbacks);
callbackIds.reserve(numCallbacks);
for (size_t i = 0; i < numCallbacks; i++) {
listeners.push_back(sp<BBinder>::make());
surfaceControls.push_back(sp<BBinder>::make());
callbackIds.push_back({{static_cast<int64_t>(i), CallbackId::Type::ON_COMMIT}});
}
for (auto _ : state) {
for (size_t i = 0; i < numCallbacks; i++) {
invoker.addCallbackHandle(
CallbackHandle{listeners[i], callbackIds[i], surfaceControls[i]});
}
invoker.sendCallbacks(false);
invoker.clearCompletedTransactions();
}
}
BENCHMARK(TransactionCallbackInvoker_sendCallbacks)->Arg(1)->Arg(2)->Arg(5);
} // namespace android::surfaceflinger