Loading libs/binder/tests/IBinderRpcBenchmark.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -17,4 +17,5 @@ interface IBinderRpcBenchmark { @utf8InCpp String repeatString(@utf8InCpp String str); IBinder repeatBinder(IBinder binder); byte[] repeatBytes(in byte[] bytes); } libs/binder/tests/binderRpcBenchmark.cpp +35 −12 Original line number Diff line number Diff line Loading @@ -50,8 +50,12 @@ class MyBinderRpcBenchmark : public BnBinderRpcBenchmark { *out = str; return Status::ok(); } Status repeatBinder(const sp<IBinder>& str, sp<IBinder>* out) override { *out = str; Status repeatBinder(const sp<IBinder>& binder, sp<IBinder>* out) override { *out = binder; return Status::ok(); } Status repeatBytes(const std::vector<uint8_t>& bytes, std::vector<uint8_t>* out) override { *out = bytes; return Status::ok(); } }; Loading @@ -61,12 +65,11 @@ enum Transport { RPC, }; static void EachTransport(benchmark::internal::Benchmark* b) { static const std::initializer_list<int64_t> kTransportList = { #ifdef __BIONIC__ b->Args({Transport::KERNEL}); Transport::KERNEL, #endif b->Args({Transport::RPC}); } Transport::RPC}; static sp<RpcSession> gSession = RpcSession::make(); #ifdef __BIONIC__ Loading Loading @@ -96,9 +99,9 @@ void BM_pingTransaction(benchmark::State& state) { CHECK_EQ(OK, binder->pingBinder()); } } BENCHMARK(BM_pingTransaction)->Apply(EachTransport); BENCHMARK(BM_pingTransaction)->ArgsProduct({kTransportList}); void BM_repeatString(benchmark::State& state) { void BM_repeatTwoPageString(benchmark::State& state) { sp<IBinder> binder = getBinderForOptions(state); sp<IBinderRpcBenchmark> iface = interface_cast<IBinderRpcBenchmark>(binder); Loading @@ -125,7 +128,27 @@ void BM_repeatString(benchmark::State& state) { CHECK(ret.isOk()) << ret; } } BENCHMARK(BM_repeatString)->Apply(EachTransport); BENCHMARK(BM_repeatTwoPageString)->ArgsProduct({kTransportList}); void BM_throughputForTransportAndBytes(benchmark::State& state) { sp<IBinder> binder = getBinderForOptions(state); sp<IBinderRpcBenchmark> iface = interface_cast<IBinderRpcBenchmark>(binder); CHECK(iface != nullptr); std::vector<uint8_t> bytes = std::vector<uint8_t>(state.range(1)); for (size_t i = 0; i < bytes.size(); i++) { bytes[i] = i % 256; } while (state.KeepRunning()) { std::vector<uint8_t> out; Status ret = iface->repeatBytes(bytes, &out); CHECK(ret.isOk()) << ret; } } BENCHMARK(BM_throughputForTransportAndBytes) ->ArgsProduct({kTransportList, {64, 1024, 2048, 4096, 8182, 16364, 32728, 65535, 65536, 65537}}); void BM_repeatBinder(benchmark::State& state) { sp<IBinder> binder = gSession->getRootObject(); Loading @@ -142,7 +165,7 @@ void BM_repeatBinder(benchmark::State& state) { CHECK(ret.isOk()) << ret; } } BENCHMARK(BM_repeatBinder)->Apply(EachTransport); BENCHMARK(BM_repeatBinder)->ArgsProduct({kTransportList}); int main(int argc, char** argv) { ::benchmark::Initialize(&argc, argv); Loading @@ -152,8 +175,8 @@ int main(int argc, char** argv) { (void)unlink(addr.c_str()); std::cerr << "Tests suffixes:" << std::endl; std::cerr << "\t\\" << Transport::KERNEL << " is KERNEL" << std::endl; std::cerr << "\t\\" << Transport::RPC << " is RPC" << std::endl; std::cerr << "\t.../" << Transport::KERNEL << " is KERNEL" << std::endl; std::cerr << "\t.../" << Transport::RPC << " is RPC" << std::endl; if (0 == fork()) { prctl(PR_SET_PDEATHSIG, SIGHUP); // racey, okay Loading Loading
libs/binder/tests/IBinderRpcBenchmark.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -17,4 +17,5 @@ interface IBinderRpcBenchmark { @utf8InCpp String repeatString(@utf8InCpp String str); IBinder repeatBinder(IBinder binder); byte[] repeatBytes(in byte[] bytes); }
libs/binder/tests/binderRpcBenchmark.cpp +35 −12 Original line number Diff line number Diff line Loading @@ -50,8 +50,12 @@ class MyBinderRpcBenchmark : public BnBinderRpcBenchmark { *out = str; return Status::ok(); } Status repeatBinder(const sp<IBinder>& str, sp<IBinder>* out) override { *out = str; Status repeatBinder(const sp<IBinder>& binder, sp<IBinder>* out) override { *out = binder; return Status::ok(); } Status repeatBytes(const std::vector<uint8_t>& bytes, std::vector<uint8_t>* out) override { *out = bytes; return Status::ok(); } }; Loading @@ -61,12 +65,11 @@ enum Transport { RPC, }; static void EachTransport(benchmark::internal::Benchmark* b) { static const std::initializer_list<int64_t> kTransportList = { #ifdef __BIONIC__ b->Args({Transport::KERNEL}); Transport::KERNEL, #endif b->Args({Transport::RPC}); } Transport::RPC}; static sp<RpcSession> gSession = RpcSession::make(); #ifdef __BIONIC__ Loading Loading @@ -96,9 +99,9 @@ void BM_pingTransaction(benchmark::State& state) { CHECK_EQ(OK, binder->pingBinder()); } } BENCHMARK(BM_pingTransaction)->Apply(EachTransport); BENCHMARK(BM_pingTransaction)->ArgsProduct({kTransportList}); void BM_repeatString(benchmark::State& state) { void BM_repeatTwoPageString(benchmark::State& state) { sp<IBinder> binder = getBinderForOptions(state); sp<IBinderRpcBenchmark> iface = interface_cast<IBinderRpcBenchmark>(binder); Loading @@ -125,7 +128,27 @@ void BM_repeatString(benchmark::State& state) { CHECK(ret.isOk()) << ret; } } BENCHMARK(BM_repeatString)->Apply(EachTransport); BENCHMARK(BM_repeatTwoPageString)->ArgsProduct({kTransportList}); void BM_throughputForTransportAndBytes(benchmark::State& state) { sp<IBinder> binder = getBinderForOptions(state); sp<IBinderRpcBenchmark> iface = interface_cast<IBinderRpcBenchmark>(binder); CHECK(iface != nullptr); std::vector<uint8_t> bytes = std::vector<uint8_t>(state.range(1)); for (size_t i = 0; i < bytes.size(); i++) { bytes[i] = i % 256; } while (state.KeepRunning()) { std::vector<uint8_t> out; Status ret = iface->repeatBytes(bytes, &out); CHECK(ret.isOk()) << ret; } } BENCHMARK(BM_throughputForTransportAndBytes) ->ArgsProduct({kTransportList, {64, 1024, 2048, 4096, 8182, 16364, 32728, 65535, 65536, 65537}}); void BM_repeatBinder(benchmark::State& state) { sp<IBinder> binder = gSession->getRootObject(); Loading @@ -142,7 +165,7 @@ void BM_repeatBinder(benchmark::State& state) { CHECK(ret.isOk()) << ret; } } BENCHMARK(BM_repeatBinder)->Apply(EachTransport); BENCHMARK(BM_repeatBinder)->ArgsProduct({kTransportList}); int main(int argc, char** argv) { ::benchmark::Initialize(&argc, argv); Loading @@ -152,8 +175,8 @@ int main(int argc, char** argv) { (void)unlink(addr.c_str()); std::cerr << "Tests suffixes:" << std::endl; std::cerr << "\t\\" << Transport::KERNEL << " is KERNEL" << std::endl; std::cerr << "\t\\" << Transport::RPC << " is RPC" << std::endl; std::cerr << "\t.../" << Transport::KERNEL << " is KERNEL" << std::endl; std::cerr << "\t.../" << Transport::RPC << " is RPC" << std::endl; if (0 == fork()) { prctl(PR_SET_PDEATHSIG, SIGHUP); // racey, okay Loading