// Copyright (C) 2023 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #if __ANDROID__ #include #include #include #include #include #include using android::IPCThreadState; using android::defaultServiceManager; namespace dittosuite { BinderService::BinderService(const Params& params, const std::string& name, int64_t threads) : Instruction(kName, params), threads_(threads), name_(name) { pthread_mutex_init(&s_work_lock, nullptr); pthread_cond_init(&s_work_cond, nullptr); } void BinderService::RunSingle() { LOGD("Joining thread pool"); pthread_mutex_lock(&s_work_lock); pthread_cond_wait(&s_work_cond, &s_work_lock); pthread_mutex_unlock(&s_work_lock); LOGD("Exiting thread pool"); } void BinderService::SetUp() { Instruction::SetUp(); LOGD("Creating Binder service: " + name_); defaultServiceManager()->addService(String16(name_.c_str()), new DittoBinder(&s_work_cond)); android::ProcessState::self()->setThreadPoolMaxThreadCount(threads_); android::ProcessState::self()->startThreadPool(); LOGD("Demo service is now ready"); } void BinderService::TearDown() { LOGD("Demo service finished"); pthread_cond_destroy(&s_work_cond); pthread_mutex_destroy(&s_work_lock); Instruction::TearDown(); } } // namespace dittosuite #endif