1*4d7e907cSAndroid Build Coastguard Worker #define LOG_TAG "hidl_test" 2*4d7e907cSAndroid Build Coastguard Worker 3*4d7e907cSAndroid Build Coastguard Worker #include <android-base/logging.h> 4*4d7e907cSAndroid Build Coastguard Worker #include "Multithread.h" 5*4d7e907cSAndroid Build Coastguard Worker #include <inttypes.h> 6*4d7e907cSAndroid Build Coastguard Worker #include <thread> 7*4d7e907cSAndroid Build Coastguard Worker 8*4d7e907cSAndroid Build Coastguard Worker #include <hidl/HidlTransportSupport.h> 9*4d7e907cSAndroid Build Coastguard Worker 10*4d7e907cSAndroid Build Coastguard Worker namespace android { 11*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 12*4d7e907cSAndroid Build Coastguard Worker namespace tests { 13*4d7e907cSAndroid Build Coastguard Worker namespace multithread { 14*4d7e907cSAndroid Build Coastguard Worker namespace V1_0 { 15*4d7e907cSAndroid Build Coastguard Worker namespace implementation { 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Worker // Methods from ::android::hardware::tests::multithread::V1_0::IMultithread follow. setNumThreads(int32_t maxThreads,int32_t numThreads)18*4d7e907cSAndroid Build Coastguard WorkerReturn<void> Multithread::setNumThreads(int32_t maxThreads, int32_t numThreads) { 19*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "SERVER(Multithread) setNumThreads(" 20*4d7e907cSAndroid Build Coastguard Worker << maxThreads << ", " << numThreads << ")"; 21*4d7e907cSAndroid Build Coastguard Worker 22*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "SERVER(Multithread) call configureRpcThreadpool(" 23*4d7e907cSAndroid Build Coastguard Worker << maxThreads << ")"; 24*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::configureRpcThreadpool(maxThreads, /*willjoin*/ false); 25*4d7e907cSAndroid Build Coastguard Worker 26*4d7e907cSAndroid Build Coastguard Worker mNumThreads = numThreads; 27*4d7e907cSAndroid Build Coastguard Worker mNoTimeout = true; 28*4d7e907cSAndroid Build Coastguard Worker 29*4d7e907cSAndroid Build Coastguard Worker return Void(); 30*4d7e907cSAndroid Build Coastguard Worker } 31*4d7e907cSAndroid Build Coastguard Worker runNewThread()32*4d7e907cSAndroid Build Coastguard WorkerReturn<bool> Multithread::runNewThread() { 33*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "SERVER(Multithread) runNewThread()"; 34*4d7e907cSAndroid Build Coastguard Worker 35*4d7e907cSAndroid Build Coastguard Worker std::unique_lock<std::mutex> lk(mCvMutex); 36*4d7e907cSAndroid Build Coastguard Worker --mNumThreads; 37*4d7e907cSAndroid Build Coastguard Worker 38*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "SERVER(Multithread) runNewThread()"; 39*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << mNumThreads << "threads left"; 40*4d7e907cSAndroid Build Coastguard Worker 41*4d7e907cSAndroid Build Coastguard Worker mCv.notify_all(); 42*4d7e907cSAndroid Build Coastguard Worker bool noTimeout = mCv.wait_for(lk, kTimeoutDuration, 43*4d7e907cSAndroid Build Coastguard Worker [&] { return mNumThreads <= 0 || !mNoTimeout; }); 44*4d7e907cSAndroid Build Coastguard Worker 45*4d7e907cSAndroid Build Coastguard Worker if (!noTimeout) { 46*4d7e907cSAndroid Build Coastguard Worker mNoTimeout = false; 47*4d7e907cSAndroid Build Coastguard Worker mCv.notify_all(); 48*4d7e907cSAndroid Build Coastguard Worker } 49*4d7e907cSAndroid Build Coastguard Worker return mNoTimeout; 50*4d7e907cSAndroid Build Coastguard Worker } 51*4d7e907cSAndroid Build Coastguard Worker HIDL_FETCH_IMultithread(const char *)52*4d7e907cSAndroid Build Coastguard WorkerIMultithread* HIDL_FETCH_IMultithread(const char* /* name */) { 53*4d7e907cSAndroid Build Coastguard Worker return new Multithread(); 54*4d7e907cSAndroid Build Coastguard Worker } 55*4d7e907cSAndroid Build Coastguard Worker 56*4d7e907cSAndroid Build Coastguard Worker decltype(Multithread::kTimeoutDuration) Multithread::kTimeoutDuration; 57*4d7e907cSAndroid Build Coastguard Worker 58*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation 59*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_0 60*4d7e907cSAndroid Build Coastguard Worker } // namespace multithread 61*4d7e907cSAndroid Build Coastguard Worker } // namespace tests 62*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 63*4d7e907cSAndroid Build Coastguard Worker } // namespace android 64