Add benchmark for sending a vector of binders over AIDL
Test: atest libbinder_benchmark
Bug: none
Change-Id: I5ea993101e721703bed1ce6b244a94706d1d97aa
diff --git a/vts/performance/Benchmark_binder.cpp b/vts/performance/Benchmark_binder.cpp
index 1458fc9..41c941e 100644
--- a/vts/performance/Benchmark_binder.cpp
+++ b/vts/performance/Benchmark_binder.cpp
@@ -33,6 +33,8 @@
using android::sp;
using android::status_t;
using android::String16;
+using android::IBinder;
+using android::BBinder;
// libbinder:
using android::getService;
@@ -58,6 +60,10 @@
*_aidl_return = data;
return Status::ok();
}
+ Status sendBinderVec(const vector<sp<IBinder>>& data, vector<sp<IBinder>>* _aidl_return) {
+ *_aidl_return = data;
+ return Status::ok();
+ }
};
bool startServer() {
@@ -92,6 +98,28 @@
BENCHMARK(BM_sendVec_binder)->RangeMultiplier(2)->Range(4, 65536);
+static void BM_sendBinderVec_binder(benchmark::State& state) {
+ sp<IBenchmark> service;
+ // Prepare data to IPC
+ vector<sp<IBinder>> data_vec;
+ vector<sp<IBinder>> data_return;
+ data_vec.resize(state.range(0));
+ for (int i = 0; i < state.range(0); i++) {
+ data_vec[i] = sp<BBinder>::make();
+ }
+ // getService automatically retries
+ status_t status = getService(String16(kServiceName), &service);
+ if (status != OK) {
+ state.SkipWithError("Failed to retrieve benchmark service.");
+ }
+ // Start running
+ while (state.KeepRunning()) {
+ service->sendBinderVec(data_vec, &data_return);
+ }
+}
+
+BENCHMARK(BM_sendBinderVec_binder)->RangeMultiplier(2)->Range(4, 65536);
+
int main(int argc, char* argv []) {
::benchmark::Initialize(&argc, argv);