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);