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 1911a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandnamespace android { 2011a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandnamespace hardware { 2111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland 2211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandvoid configureRpcThreadpool(size_t maxThreads, bool callerWillJoin) { 2311a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland // TODO(b/32756130) this should be transport-dependent 2411a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland configureBinderRpcThreadpool(maxThreads, callerWillJoin); 2511a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland} 2611a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandvoid joinRpcThreadpool() { 2711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland // TODO(b/32756130) this should be transport-dependent 2811a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland joinBinderRpcThreadpool(); 2911a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland} 3011a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland 3181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenenbool setMinSchedulerPolicy(const sp<::android::hidl::base::V1_0::IBase>& service, 3281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen int policy, int priority) { 3381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen if (service->isRemote()) { 3481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Can't set scheduler policy on remote service."); 3581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 3681ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } 3781ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 3881ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen if (policy != SCHED_NORMAL && policy != SCHED_FIFO && policy != SCHED_RR) { 3981ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Invalid scheduler policy %d", policy); 4081ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 4181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } 4281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 4381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen if (policy == SCHED_NORMAL && (priority < -20 || priority > 19)) { 4481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Invalid priority for SCHED_NORMAL: %d", priority); 4581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 4681ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } else if (priority < 1 || priority > 99) { 4781ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen ALOGE("Invalid priority for real-time policy: %d", priority); 4881ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return false; 4981ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen } 5081ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 5181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen details::gServicePrioMap.set(service, { policy, priority }); 5281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 5381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen return true; 5481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen} 5581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen 5681ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen} 5711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland} 58