13c3173acSopenharmony_ci/*
23c3173acSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
33c3173acSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43c3173acSopenharmony_ci * you may not use this file except in compliance with the License.
53c3173acSopenharmony_ci * You may obtain a copy of the License at
63c3173acSopenharmony_ci *
73c3173acSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83c3173acSopenharmony_ci *
93c3173acSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103c3173acSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113c3173acSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123c3173acSopenharmony_ci * See the License for the specific language governing permissions and
133c3173acSopenharmony_ci * limitations under the License.
143c3173acSopenharmony_ci */
153c3173acSopenharmony_ci
163c3173acSopenharmony_ci#include "qos_policy.h"
173c3173acSopenharmony_ci#include <unistd.h>
183c3173acSopenharmony_ci#include "concurrent_task_log.h"
193c3173acSopenharmony_ci
203c3173acSopenharmony_cistatic struct QosPolicyDatas g_defaultQosPolicy = {
213c3173acSopenharmony_ci    .policyType = QOS_POLICY_DEFAULT,
223c3173acSopenharmony_ci    .policyFlag = QOS_FLAG_ALL,
233c3173acSopenharmony_ci    .policys = {
243c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
253c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
263c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
273c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
283c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
293c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
303c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
313c3173acSopenharmony_ci    }
323c3173acSopenharmony_ci};
333c3173acSopenharmony_ci
343c3173acSopenharmony_cistatic struct QosPolicyDatas g_foregroundQosPolicy = {
353c3173acSopenharmony_ci    .policyType = QOS_POLICY_FRONT,
363c3173acSopenharmony_ci    .policyFlag = QOS_FLAG_ALL,
373c3173acSopenharmony_ci    .policys = {
383c3173acSopenharmony_ci        {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
393c3173acSopenharmony_ci        {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
403c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
413c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE
423c3173acSopenharmony_ci        {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
433c3173acSopenharmony_ci        {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
443c3173acSopenharmony_ci        {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
453c3173acSopenharmony_ci#else
463c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
473c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
483c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
493c3173acSopenharmony_ci#endif
503c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
513c3173acSopenharmony_ci    }
523c3173acSopenharmony_ci};
533c3173acSopenharmony_ci
543c3173acSopenharmony_cistatic struct QosPolicyDatas g_backgroundQosPolicy = {
553c3173acSopenharmony_ci    .policyType = QOS_POLICY_BACK,
563c3173acSopenharmony_ci    .policyFlag = QOS_FLAG_ALL & ~QOS_FLAG_RT,
573c3173acSopenharmony_ci    .policys = {
583c3173acSopenharmony_ci        {15, 15, 0, 150, 0, SCHED_POLICY_OTHER},
593c3173acSopenharmony_ci        {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
603c3173acSopenharmony_ci        {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
613c3173acSopenharmony_ci        {0, 0, 0, 300, 0, SCHED_POLICY_OTHER},
623c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE
633c3173acSopenharmony_ci        {-5, -5, 0, 350, 0, SCHED_POLICY_OTHER},
643c3173acSopenharmony_ci        {-5, -5, 0, 350, 0, SCHED_POLICY_OTHER},
653c3173acSopenharmony_ci#else
663c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
673c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
683c3173acSopenharmony_ci#endif
693c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
703c3173acSopenharmony_ci    }
713c3173acSopenharmony_ci};
723c3173acSopenharmony_ci
733c3173acSopenharmony_cistatic struct QosPolicyDatas g_systemServerQosPolicy = {
743c3173acSopenharmony_ci    .policyType = QOS_POLICY_SYSTEM_SERVER,
753c3173acSopenharmony_ci    .policyFlag = QOS_FLAG_ALL,
763c3173acSopenharmony_ci    .policys = {
773c3173acSopenharmony_ci        {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
783c3173acSopenharmony_ci        {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
793c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
803c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE
813c3173acSopenharmony_ci        {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
823c3173acSopenharmony_ci        {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
833c3173acSopenharmony_ci        {-10, -10, 0, 1024, 1, SCHED_POLICY_FIFO | SCHED_RESET_ON_FORK},
843c3173acSopenharmony_ci#else
853c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
863c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
873c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
883c3173acSopenharmony_ci#endif
893c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
903c3173acSopenharmony_ci    }
913c3173acSopenharmony_ci};
923c3173acSopenharmony_ci
933c3173acSopenharmony_cistatic struct QosPolicyDatas g_focusQosPolicy = {
943c3173acSopenharmony_ci    .policyType = QOS_POLICY_FOCUS,
953c3173acSopenharmony_ci    .policyFlag = QOS_FLAG_ALL,
963c3173acSopenharmony_ci    .policys = {
973c3173acSopenharmony_ci        {10, 10, 0, 200, 0, SCHED_POLICY_OTHER},
983c3173acSopenharmony_ci        {5, 5, 0, 250, 0, SCHED_POLICY_OTHER},
993c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
1003c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE
1013c3173acSopenharmony_ci        {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
1023c3173acSopenharmony_ci        {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER},
1033c3173acSopenharmony_ci        {-10, -10, 0, 1024, 1, SCHED_POLICY_RT_EX | SCHED_RESET_ON_FORK},
1043c3173acSopenharmony_ci#else
1053c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
1063c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
1073c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
1083c3173acSopenharmony_ci#endif
1093c3173acSopenharmony_ci        {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER},
1103c3173acSopenharmony_ci    }
1113c3173acSopenharmony_ci};
1123c3173acSopenharmony_ci
1133c3173acSopenharmony_cinamespace OHOS {
1143c3173acSopenharmony_cinamespace ConcurrentTask {
1153c3173acSopenharmony_ciint QosPolicy::SetQosPolicy(struct QosPolicyDatas *policyDatas)
1163c3173acSopenharmony_ci{
1173c3173acSopenharmony_ci    return QosPolicySet(policyDatas);
1183c3173acSopenharmony_ci}
1193c3173acSopenharmony_ci
1203c3173acSopenharmony_civoid QosPolicy::Init()
1213c3173acSopenharmony_ci{
1223c3173acSopenharmony_ci    int ret;
1233c3173acSopenharmony_ci
1243c3173acSopenharmony_ci    ret = SetQosPolicy(&g_defaultQosPolicy);
1253c3173acSopenharmony_ci    if (ret) {
1263c3173acSopenharmony_ci        CONCUR_LOGE("%{public}d set g_defaultQosPolicy failed", getuid());
1273c3173acSopenharmony_ci    }
1283c3173acSopenharmony_ci
1293c3173acSopenharmony_ci    ret = SetQosPolicy(&g_foregroundQosPolicy);
1303c3173acSopenharmony_ci    if (ret) {
1313c3173acSopenharmony_ci        CONCUR_LOGE("%{public}d set g_foregroundQosPolicy failed", getuid());
1323c3173acSopenharmony_ci    }
1333c3173acSopenharmony_ci
1343c3173acSopenharmony_ci    ret = SetQosPolicy(&g_backgroundQosPolicy);
1353c3173acSopenharmony_ci    if (ret) {
1363c3173acSopenharmony_ci        CONCUR_LOGE("%{public}d set g_backgroundQosPolicy failed", getuid());
1373c3173acSopenharmony_ci    }
1383c3173acSopenharmony_ci
1393c3173acSopenharmony_ci    ret = SetQosPolicy(&g_systemServerQosPolicy);
1403c3173acSopenharmony_ci    if (ret) {
1413c3173acSopenharmony_ci        CONCUR_LOGE("%{public}d set g_systemServerQosPolicy failed", getuid());
1423c3173acSopenharmony_ci    }
1433c3173acSopenharmony_ci
1443c3173acSopenharmony_ci    ret = SetQosPolicy(&g_focusQosPolicy);
1453c3173acSopenharmony_ci    if (ret) {
1463c3173acSopenharmony_ci        CONCUR_LOGE("%{public}d set g_focusQosPolicy failed", getuid());
1473c3173acSopenharmony_ci    }
1483c3173acSopenharmony_ci
1493c3173acSopenharmony_ci    CONCUR_LOGI("set qos policy finish");
1503c3173acSopenharmony_ci}
1513c3173acSopenharmony_ci}
1523c3173acSopenharmony_ci}
153