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