Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46e70bcc authored by Steven Moreland's avatar Steven Moreland Committed by Automerger Merge Worker
Browse files

Merge "binderRpcBenchmark: test more data sizes" am: a00f4938

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1788488

Change-Id: I3b9b474d7d3c19abf7d05217e1d43c9676d08438
parents 72ffcc55 a00f4938
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -17,4 +17,5 @@
interface IBinderRpcBenchmark {
    @utf8InCpp String repeatString(@utf8InCpp String str);
    IBinder repeatBinder(IBinder binder);
    byte[] repeatBytes(in byte[] bytes);
}
+35 −12
Original line number Diff line number Diff line
@@ -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();
    }
};
@@ -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__
@@ -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);
@@ -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();
@@ -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);
@@ -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