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

Commit 31fa5c5e authored by Steven Moreland's avatar Steven Moreland Committed by Automerger Merge Worker
Browse files

Merge "bindeRpcBenchmark: rpc uses separate process" am: 3d2a8f50 am: ce4e0228 am: d16f6aca

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

Change-Id: I7dbd45ac2872ca51a1501f3b67f55dbac6539452
parents 5bbd7717 d16f6aca
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@

#include <thread>

#include <signal.h>
#include <sys/prctl.h>
#include <sys/types.h>
#include <unistd.h>
@@ -154,6 +155,16 @@ int main(int argc, char** argv) {
    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
        sp<RpcServer> server = RpcServer::make();
        server->setRootObject(sp<MyBinderRpcBenchmark>::make());
        server->iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProduction();
        CHECK(server->setupUnixDomainServer(addr.c_str()));
        server->join();
        exit(1);
    }

#ifdef __BIONIC__
    if (0 == fork()) {
        prctl(PR_SET_PDEATHSIG, SIGHUP); // racey, okay
@@ -161,6 +172,7 @@ int main(int argc, char** argv) {
                 defaultServiceManager()->addService(kKernelBinderInstance,
                                                     sp<MyBinderRpcBenchmark>::make()));
        IPCThreadState::self()->joinThreadPool();
        exit(1);
    }

    ProcessState::self()->setThreadPoolMaxThreadCount(1);
@@ -170,14 +182,6 @@ int main(int argc, char** argv) {
    CHECK_NE(nullptr, gKernelBinder.get());
#endif

    std::thread([addr]() {
        sp<RpcServer> server = RpcServer::make();
        server->setRootObject(sp<MyBinderRpcBenchmark>::make());
        server->iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProduction();
        CHECK(server->setupUnixDomainServer(addr.c_str()));
        server->join();
    }).detach();

    for (size_t tries = 0; tries < 5; tries++) {
        usleep(10000);
        if (gSession->setupUnixDomainClient(addr.c_str())) goto success;