SchedulingPolicyService.cpp revision 3ac757658dd8dc81f3b18ad1e8788640a1f2183b
1236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland/*
2236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * Copyright (C) 2017 The Android Open Source Project
3236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland *
4236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * Licensed under the Apache License, Version 2.0 (the "License");
5236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * you may not use this file except in compliance with the License.
6236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * You may obtain a copy of the License at
7236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland *
8236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland *      http://www.apache.org/licenses/LICENSE-2.0
9236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland *
10236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * Unless required by applicable law or agreed to in writing, software
11236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * distributed under the License is distributed on an "AS IS" BASIS,
12236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * See the License for the specific language governing permissions and
14236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland * limitations under the License.
15236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland */
16236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland#define LOG_TAG "schedulerservicehidl"
17236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
18236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland#include "SchedulingPolicyService.h"
19236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
20236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland#include <private/android_filesystem_config.h> // for AID_CAMERASERVER
21236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
22236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland#include <log/log.h>
23236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland#include <hwbinder/IPCThreadState.h>
24236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland#include <mediautils/SchedulingPolicyService.h>
25236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
26236461444e6a29de42ab3d49e3308fd75306cd9dSteven Morelandnamespace android {
27236461444e6a29de42ab3d49e3308fd75306cd9dSteven Morelandnamespace frameworks {
28236461444e6a29de42ab3d49e3308fd75306cd9dSteven Morelandnamespace schedulerservice {
29236461444e6a29de42ab3d49e3308fd75306cd9dSteven Morelandnamespace V1_0 {
30236461444e6a29de42ab3d49e3308fd75306cd9dSteven Morelandnamespace implementation {
31236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
323ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Morelandbool SchedulingPolicyService::isAllowed() {
33236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland    using ::android::hardware::IPCThreadState;
34236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
353ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland    return IPCThreadState::self()->getCallingUid() == AID_CAMERASERVER;
363ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland}
373ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland
383ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven MorelandReturn<bool> SchedulingPolicyService::requestPriority(int32_t pid, int32_t tid, int32_t priority) {
39236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland    if (priority < static_cast<int32_t>(Priority::MIN) ||
40236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland            priority > static_cast<int32_t>(Priority::MAX)) {
41236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland        return false;
42236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland    }
43236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
443ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland    if (!isAllowed()) {
45236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland        return false;
46236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland    }
47236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
483ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland    // TODO(b/37226359): decouple from and remove AIDL service
49236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland    // this should always be allowed since we are in system_server.
50236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland    int value = ::android::requestPriority(pid, tid, priority, false /* isForApp */);
51236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland    return value == 0 /* success */;
52236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland}
53236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland
543ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven MorelandReturn<int32_t> SchedulingPolicyService::getMaxAllowedPriority() {
553ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland    if (!isAllowed()) {
563ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland        return 0;
573ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland    }
583ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland
593ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland    // TODO(b/37226359): decouple from and remove AIDL service
603ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland    return 3;
613ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland}
623ac757658dd8dc81f3b18ad1e8788640a1f2183bSteven Moreland
63236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland}  // namespace implementation
64236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland}  // namespace V1_0
65236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland}  // namespace schedulerservice
66236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland}  // namespace frameworks
67236461444e6a29de42ab3d49e3308fd75306cd9dSteven Moreland}  // namespace android
68