111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland/* 211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * Copyright (C) 2017 The Android Open Source Project 311a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * 411a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * Licensed under the Apache License, Version 2.0 (the "License"); 511a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * you may not use this file except in compliance with the License. 611a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * You may obtain a copy of the License at 711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * 811a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * http://www.apache.org/licenses/LICENSE-2.0 911a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * 1011a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * Unless required by applicable law or agreed to in writing, software 1111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * distributed under the License is distributed on an "AS IS" BASIS, 1211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1311a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * See the License for the specific language governing permissions and 1411a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * limitations under the License. 1511a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland */ 1611a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland#include <hidl/HidlTransportSupport.h> 1711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland#include <hidl/HidlBinderSupport.h> 1811a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland 19a8b6eabcab2ddc29173882e750e801e8f6fd8a07Yifan Hong#include <android/hidl/manager/1.0/IServiceManager.h> 20a8b6eabcab2ddc29173882e750e801e8f6fd8a07Yifan Hong 2111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandnamespace android { 2211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandnamespace hardware { 2311a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland 2411a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandvoid configureRpcThreadpool(size_t maxThreads, bool callerWillJoin) { 2511a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland // TODO(b/32756130) this should be transport-dependent 2611a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland configureBinderRpcThreadpool(maxThreads, callerWillJoin); 2711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland} 2811a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandvoid joinRpcThreadpool() { 2911a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland // TODO(b/32756130) this should be transport-dependent 3011a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland joinBinderRpcThreadpool(); 3111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland} 3211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland 333f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenenint setupTransportPolling() { 343f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen return setupBinderPolling(); 353f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen} 363f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen 373f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenenstatus_t handleTransportPoll(int /*fd*/) { 383f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen return handleBinderPoll(); 393f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen} 403f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen 4181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenenbool setMinSchedulerPolicy(const sp<::android::hidl::base::V1_0::IBase>& service, 4281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen int policy, int priority) { 4381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen if (service->isRemote()) { 4481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Can't set scheduler policy on remote service."); 4581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 4681ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } 4781ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 4881ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen if (policy != SCHED_NORMAL && policy != SCHED_FIFO && policy != SCHED_RR) { 4981ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Invalid scheduler policy %d", policy); 5081ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 5181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } 5281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 5381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen if (policy == SCHED_NORMAL && (priority < -20 || priority > 19)) { 5481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Invalid priority for SCHED_NORMAL: %d", priority); 5581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 5681ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } else if (priority < 1 || priority > 99) { 5781ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Invalid priority for real-time policy: %d", priority); 5881ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 5981ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } 6081ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 6181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen details::gServicePrioMap.set(service, { policy, priority }); 6281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 6381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return true; 6481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen} 6581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 667a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hongnamespace details { 677a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hongint32_t getPidIfSharable() { 687a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong#if LIBHIDL_TARGET_DEBUGGABLE 697a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong return getpid(); 707a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong#else 717a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong using android::hidl::manager::V1_0::IServiceManager; 72a8b6eabcab2ddc29173882e750e801e8f6fd8a07Yifan Hong return static_cast<int32_t>(IServiceManager::PidConstant::NO_PID); 737a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong#endif 747a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong} 757a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong} // namespace details 767a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong 77a15479f3601819b4a0e8b20644a0d54615d8022fSteven Moreland} // namespace hardware 78a15479f3601819b4a0e8b20644a0d54615d8022fSteven Moreland} // namespace android 79